You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ClickHouse TOO_MANY_PARTS异常:不截断表删除异常文件方法咨询

解决Clickhouse中未完成INSERT进程残留及无效.bin文件删除问题

问题分析

你遇到的TOO_MANY_PARTS错误源于单条INSERT语句涉及的分区数超出max_partitions_per_insert_block配置限制,取消查询后后台残留进程仍持续尝试写入无效的20.bin文件,且生产环境无法执行表截断操作。

解决方案

1. 终止残留的异常进程

先定位并终止持续报错的插入进程:

  • 执行命令筛选目标进程:
    ps aux | grep clickhouse | grep -v clickhouse-server
    
  • 找到对应进程ID后,执行终止命令(注意不要误杀Clickhouse主服务进程):
    kill -9 <进程ID>
    

2. 安全删除无效的20.bin文件(针对ReplicatedMergeTree表)

直接删除磁盘文件可能破坏副本同步状态,需按以下步骤操作:

  1. 暂停目标表的副本同步:
    ALTER TABLE <你的表名> STOP REPLICA;
    
  2. 手动删除磁盘上的无效文件:
    rm /var/lib/clickhouse/store/5bb/5bb957f7-65f5-47e1-a29f-caa9fae3edae/shard3_replica2/20.bin
    
  3. 恢复副本同步并同步状态:
    ALTER TABLE <你的表名> START REPLICA;
    SYSTEM SYNC REPLICA <你的表名>;
    
  4. 验证无效文件相关记录已清除:
    SELECT * FROM system.parts WHERE table = '<你的表名>' AND name LIKE '%20%';
    SELECT * FROM system.replicas WHERE table = '<你的表名>';
    

3. 根源问题修复

避免再次触发该错误,可选择以下方式:

  • 会话级别临时调整配置:
    SET max_partitions_per_insert_block = 200; -- 根据业务需求调整数值
    
  • 永久修改配置:在clickhouse-server/config.xml中添加或修改节点:
    <max_partitions_per_insert_block>200</max_partitions_per_insert_block>
    
  • 拆分INSERT语句,确保每个INSERT块涉及的分区数不超过限制。

内容的提问来源于stack exchange,提问作者prasanth boggarapu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:17:29