关于ClickHouse合并进程耗时过长的问题求助
ClickHouse合并进程耗时过长(近3小时)+ CPU高负载问题排查建议
上个月我们的ClickHouse服务器出现异常:一个合并进程持续近3小时,期间CPU负载一直居高不下。当时从system.merges表查询到的核心数据如下:
table: lakecore_metrics_latest elapsed: 9424s progress: 0.99 num_parts: 5 source_part_names: [..._10412244_10777674_... , ..._11618574_11798239_...] result_part_name: 202504_10412244_11798239_89_11799493 result_part_path: /backup partition_id: 202504 bytes_read_uncompressed: 575 GB bytes_written_uncompressed: 1034 MB memory_usage: 1 GB
目前已完成的排查:
- 合并相关配置均为默认值,未做任何修改
- 硬件配置排查后,考虑到该现象两年仅出现一次,暂排除硬件不足的可能性
暂时未找到其他根因,恳请各位提供排查思路或解决建议。
可能的排查方向与建议
- 聚焦存储IO性能:这次合并读取了575GB未压缩数据,但仅写入1034MB,说明处理的是大体积冷数据。检查当时的磁盘IO统计(如
iostat -x 1),确认/backup路径的存储是否出现读IO饱和——如果是机械盘或性能较差的存储,IO瓶颈会直接拖慢合并速度,导致CPU长时间处于等待IO的高负载状态。 - 分析分区数据特征:目标分区
202504的数据可能存在特殊情况:比如大量高基数字符串字段、未优化的编码方式,或者存在大量冗余数据(读写数据量差距极大,说明压缩比极高,合并时去重/压缩消耗大量CPU)。可以查询该分区的字段类型、编码配置,以及数据冗余情况。 - 检查ClickHouse日志细节:在
/var/log/clickhouse-server/日志中搜索合并任务的result_part_name(202504_10412244_11798239_89_11799493),查看是否有IO错误、超时、内存告警等信息——隐性的IO异常可能导致合并进程反复重试,拉长整体耗时。 - 临时应急参数调整:如果后续再出现类似情况,可临时调整参数限制合并资源:比如调低
merge_max_threads避免CPU被占满,或者调整max_bytes_to_merge_at_max_space_in_pool限制单次合并的数据量,降低单个合并任务的资源消耗。 - 优化表的分区与TTL策略:检查
lakecore_metrics_latest的TTL配置是否合理,是否存在大量未清理的小分区积累;同时确认分区键设计是否得当,避免单分区数据量过大导致合并压力陡增。
内容的提问来源于stack exchange,提问作者lyz_112
相关产品推荐
相关产品推荐

