避免最终优化
使用 OPTIMIZE TABLE ... FINAL
查询将启动对特定表的 data parts 的非计划合并,合并成一个 data part。在此过程中,ClickHouse 会读取所有 data parts,解压缩,合并,压缩成单个 part,然后重新写入到对象存储中,导致巨大的 CPU 和 IO 消耗。
请注意,即使这些 data parts 已经合并成单个 part,此优化也会重写这个 part。另外,还需注意“单个 part”的范围 - 这表示设置 max_bytes_to_merge_at_max_space_in_pool
的值将被忽略。例如,max_bytes_to_merge_at_max_space_in_pool
默认设置为 150 GB。在运行 OPTIMIZE TABLE ... FINAL 时,剩余的单个 part 甚至可能超过这个大小。这是另一个重要的考量因素,也是不建议普遍使用此命令的原因,因为将大量 150 GB 的 parts 合并成单个 part 可能需要大量的时间和/或内存。