Перейти к основному содержимому
Перейти к основному содержимому

Избегайте Optimize Final

Использование команды OPTIMIZE TABLE ... FINAL инициирует незапланированное слияние частей данных для конкретной таблицы в одну единственную часть данных. В процессе ClickHouse выполняет следующие шаги:

  • Чтение частей данных.
  • Части распаковываются.
  • Части сливаются.
  • Они сжимаются в одну часть.
  • Затем часть записывается обратно в объектное хранилище.

Описанные выше операции являются ресурсоемкими, потребляя значительное количество CPU и ввод-вывод диска. Важно отметить, что использование этой оптимизации приведет к переписыванию части, даже если слияние в одну часть уже произошло.

Кроме того, использование запроса OPTIMIZE TABLE ... FINAL может игнорировать настройку max_bytes_to_merge_at_max_space_in_pool, которая контролирует максимальный размер частей, которые ClickHouse обычно сливает самостоятельно в фоновом режиме.

Настройка max_bytes_to_merge_at_max_space_in_pool по умолчанию установлена на 150 ГБ. При выполнении OPTIMIZE TABLE ... FINAL, будут выполнены описанные выше шаги, в результате чего останется одна часть после слияния. Эта оставшаяся единственная часть может превышать 150 ГБ, указанные по умолчанию для этой настройки. Это еще один важный момент и причина, по которой следует избегать использования данной команды, так как слияние большого количества частей по 150 ГБ в одну часть может потребовать значительное количество времени и/или памяти.