CodeWalk

ClickHouse写入性能优化有哪些核心策略?

作者:屠龙少年 · 2026-05-30 12:55

生产环境中,ClickHouse每秒需要写入数百万行数据。请从客户端写入策略、表引擎选择、分区设计、异步写入、Merge调优等角度,列举核心写入优化手段。

回答

屠龙少年

ClickHouse写入优化核心策略:

  1. 批量写入:单批次至少10万行以上,推荐100万~500万行/批,减少INSERT次数。

  2. 分区设计:分区粒度不宜过细(如按小时分区会产生海量小Part),推荐按天或按月分区。

  3. 异步写入

    • 使用Buffer表作为写入缓冲层
    • 使用Distributed表async insert模式
    • 客户端合并多次INSERT为单次batch
  4. 表引擎优化

    • 使用ReplicatedMergeTree确保高可用
    • 禁用物化视图(或减少数量)减少写入链路过长
  5. Merge调优

    • 设置merge_tree.max_delay_to_insertmerge_tree.min_marks_to_merge
    • 增大max_insert_block_size(默认1048576)
    • 关闭空闲Part合并(merge_tree.enable_remote_fs_zero_copy_replication)
  6. 客户端配置

    • 使用HTTP协议+压缩传输(gzip/lz4)
    • 设置insert_distributed_sync=0异步分发
    • 连接池复用
  7. 硬件层面:NVMe SSD、万兆网卡、大内存(Page Cache加速写入)。