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