更新时间:2024-11-12 GMT+08:00

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

问题排查步骤

  1. 磁盘或其他存储介质问题导致merge过慢或者中止。

    登录Manager页面,检查是否存在磁盘容量不足或其他磁盘告警,如果存在,请按照告警指导处理。

    如果是磁盘容量不足,也可以联系客户删除部分过期数据,释放空间,快速恢复业务。

  2. Zookeeper异常导致merge无法正常执行。

    登录Manager页面,检查ZooKeeper是否存在服务不可用、ClickHouse服务在ZooKeeper的数量配额使用率超过阈值等相关告警,如果存在,请按照告警指导处理。

  3. 执行如下SQL排查是否存在副本同步队列任务积压:

    select FQDN() as node,type,count() from clusterAllReplicas(default_cluster, system.replication_queue) group by node,type;

    如果存在积压,请查看副本队列中的任务是否报错,并根据报错信息处理。

  4. 执行如下SQL排查是否存在节点间表结构不一致。

    select FQDN(), create_table_query from clusterAllReplicas(default_cluster,system.tables) where name = '${table_name}' group by FQDN(),create_table_query;

    如果存在,请将不一致的表结构修改一致。

  5. 执行如下SQL排查是否存在mutation任务异常:

    select FQDN(), database, table, mutation_id, create_time, command from clusterAllReplicas(default_cluster, system.mutations) where is_done = '0' order by create_time asc;

    如果mutation任务正常,等待mutation任务完成,如果mutation任务异常,清理异常的mutation任务。

  6. 业务写入压力过大导致merge速度小于insert速度。

    可以用以下SQL语句检查报错节点最近一小时的写入条数和频次:

    select tables,written_rows,count() from system.query_log where type='QueryFinish' and query_start_time between (toUnixTimestamp(now()) - 3600) AND toUnixTimestamp(now()) and query_kind = 'Insert' group by tables,written_rows order by written_rows limit 10;

    业务上建议一次写入一个分区,写入频率不要太快,不要小批量数据的插入,适当增大每次插入的时间间隔。

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

  • MRS 3.2.0之前版本:登录FusionInsight Manager界面,选择“集群 > ClickHouse > 配置 > 全部配置 > ClickHouseServer > 自定义 > clickhouse-config-customize”,添加表1中参数,保存配置,重启服务。
  • MRS 3.2.0及之后版本:登录FusionInsight Manager界面,选择“集群 > ClickHouse > 配置 > 全部配置”,搜索并修改参数“merge_tree.parts_to_throw_insert”的值,保存配置,重启服务。
表1 参数说明

名称

merge_tree.parts_to_throw_insert

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

验证修改结果:

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