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