更新时间:2024-07-19 GMT+08:00

数据表报错Too many parts解决方法

问题排查步骤

  1. 登录ClickHouse客户端,需要排查是否存在异常的Merge。

    select database, table, elapsed, progress, merge_type from system.merges;

  2. 业务上建议insert频率不要太快,不要小批量数据的插入,适当增大每次插入的时间间隔。
  3. 数据表分区分配不合理,导致产生太多的区分,需要重新划分分区。
  4. 如果没有触发Merge,或者Merge较慢,需要调整参数加快Merge。

    加速Merge,需要调整如下参数,请参考加速Merge操作

    配置项

    参考值

    max_threads

    CPU核数*2

    background_pool_size

    CPU核数

    merge_max_block_size

    8192的整数倍,根据CPU内存资源大小调整

    cleanup_delay_period

    适当小于默认值 30

修改parts_to_throw_insert值

增大Too many parts的触发阈值,除非特殊场景,不建议修改此配置。此配置在一定程度起到潜在问题预警的作用,如果集群硬件资源不足,此配置调整不合理,会导致服务潜在问题不能及时被发现,可能进一步引起其他故障,恢复难度增加。

登录FusionInsight Manager界面,选择“集群 > ClickHouse > 配置 > 全部配置 > ClickHouseServer > 自定义 > clickhouse-config-customize”,添加如下参数,保存配置,重启服务。

名称

merge_tree.parts_to_throw_insert

clickhouse实例内存 / 32GB * 300 (保守估计值)

验证修改结果:

登录ClickHouse客户端,执行命令select * from system.merge_tree_settings where name = 'parts_to_throw_insert';