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