что на самом деле делает сборщик мусора nodetool

Я пытаюсь освободить место на диске в C*.
Я удалил много строк, что создало много надгробий.
Я запускаю сборщик мусора nodetool и задаюсь вопросом, что этот инструмент делает за кулисами. Я читал, что он удаляет фактические данные, которые затеняет надгробие, но не надгробия (которые будут очищены после gc_grace_seconds). Это точно? инструмент сбора мусора не имеет никакой связи с параметром gc_grace_seconds? Как сборщик мусора на самом деле освобождает место на диске?

не так много документации о том, как этот инструмент работает и что он делает.

Любая помощь будет высоко ценится


person yaarix    schedule 19.02.2020    source источник


Ответы (1)


Удаление данных в Cassandra всегда добавляет новые данные, поэтому с этим нужно быть осторожным.

nodetool garbagecollect выполняет однократное сжатие для удаления перезаписанных или логически удаленных данных. Для каждого sstable будет создан новый sstable с очисткой ненужных данных. По умолчанию сборщик мусора удаляет строки или разделы, которые были удалены или обновлены новыми данными. Он также может удалить удаленные или обновленные значения ячеек, если указана опция -g CELL, но для этого потребуется больше ресурсов (ЦП ввода-вывода). Эта команда также может удалить надгробия с истекшим сроком действия (старше gc_grace_seconds), но не свежие. Плюс есть и другие ограничения на удаление надгробий.

Если просроченные надгробия все еще существуют, то единственное серьезное уплотнение может помочь их вытеснить, например, запустив nodetool compact -s на отдельных таблицах, но вам нужно убедиться, что у вас достаточно места - того же размера, что и сама таблица.

person Alex Ott    schedule 19.02.2020
comment
Спасибо! Что вы имеете в виду под этой командой, которая также может удалять надгробия с истекшим сроком действия (старше, чем gc_grace_seconds), но не свежие. Что такое свежие надгробия? Если работать с компактом с флагом --split-output, мне все еще нужно дисковое пространство, равное размеру самой таблицы? зачем мне столько места на диске при сжатии? это потому, что старый sstable все еще будет на диске, пока не завершится сжатие? - person yaarix; 19.02.2020
comment
свежие надгробия - до которых еще не дошли gc_grace_seconds. Что касается дискового пространства - когда происходит уплотнение - он не перезаписывает существующие SSTables - он записывает новые файлы и удаляет старые файлы только после завершения процесса... Вот почему вам может потребоваться размер таблицы до свободного диска пространство... - person Alex Ott; 19.02.2020
comment
Спасибо. так что и компакт, и сборщик мусора удалят старые надгробия? - person yaarix; 19.02.2020
comment
garbagecollect имеет более ограниченную функциональность, так как работает с отдельными таблицами, поэтому может не полностью очищать старые надгробия. но требует больше места на диске - person Alex Ott; 19.02.2020
comment
Спасибо. Могу ли я попросить вас немного уточнить, почему работа с отдельными таблицами может не очистить старые надгробия? - person yaarix; 19.02.2020
comment
Эта статья очень хороша: thelastpickle.com/blog/ 27.07.2016/ - person Alex Ott; 19.02.2020
comment
Спасибо большое! Это помогло освободить место на диске. - person charybr; 16.05.2020