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

Избегайте OPTIMIZE FINAL

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

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

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

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