OPTIMIZE FINAL, поскольку она запускает
ресурсоёмкие процессы, которые могут повлиять на производительность кластера.
OPTIMIZE FINAL и FINAL
OPTIMIZE FINAL — не то же самое, что FINAL, который иногда необходимо использовать,
чтобы получить результаты без дубликатов, например при работе с ReplacingMergeTree. В целом
FINAL допустимо использовать, если ваши запросы фильтруют по тем же столбцам, что и
в первичном ключе.Почему стоит этого избегать?
Это затратно
OPTIMIZE FINAL заставляет ClickHouse выполнить слияние всех активных частей в одну, даже если крупные слияния уже выполнялись. Для этого требуется:
- Распаковать все части
- Выполнить слияние данных
- Снова сжать их
- Записать итоговую часть на диск или в Объектное хранилище
Он игнорирует защитные ограничения
OPTIMIZE FINAL игнорирует это ограничение, а это означает следующее:
- Он может попытаться слить несколько частей по 150 ГБ в одну огромную часть
- Это может привести к длительным слияниям, нехватке памяти или даже к ошибкам out-of-memory
- Такие крупные части может быть сложно сливать дальше, то есть попытки их дальнейшего слияния будут завершаться неудачей по указанным выше причинам. Если слияния нужны для корректного поведения во время выполнения запроса, это может привести к нежелательным последствиям, например к накоплению дубликатов в ReplacingMergeTree, что снижает производительность запросов.