数据表报错Too many parts解决方法
问题排查步骤
- 登录ClickHouse客户端,需要排查是否存在异常的Merge。
select database, table, elapsed, progress, merge_type from system.merges;
- 业务上建议insert频率不要太快,不要小批量数据的插入,适当增大每次插入的时间间隔。
- 数据表分区分配不合理,导致产生太多的区分,需要重新划分分区。
- 如果没有触发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';