跳至主要内容

避免使用 OPTIMIZE FINAL

使用 OPTIMIZE TABLE ... FINAL 查询将启动对特定表的多个数据部分进行计划外的合并,合并成一个数据部分。在此过程中,ClickHouse 读取所有数据部分,解压缩、合并、压缩成单个部分,然后重写回对象存储,导致巨大的 CPU 和 IO 消耗。

请注意,即使数据部分已经合并成单个部分,此优化也会重写该部分。此外,务必注意“单个部分”的范围 - 这表示设置 max_bytes_to_merge_at_max_space_in_pool 的值将被忽略。例如,max_bytes_to_merge_at_max_space_in_pool 默认设置为 150 GB。运行 OPTIMIZE TABLE ... FINAL 时,剩余的单个部分可能会超过此大小。这是另一个重要的考虑因素,也是不建议普遍使用此命令的原因,因为将大量 150 GB 的部分合并成一个部分可能需要大量时间和/或内存。