跳转到主要内容
跳转到主要内容
编辑此页

避免使用 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 GB。当运行OPTIMIZE TABLE ... FINAL时,将执行上述步骤,从而在合并后生成单个部分。剩余的单个部分可能会超过此设置默认值指定的 150 GB。这是另一个重要的考虑因素,也是您应该避免使用此语句的原因,因为将大量 150 GB 的部分合并为单个部分可能需要大量时间和/或内存。