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

Избегать 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 ГБ в одну часть может потребовать значительное количество времени и/или памяти.