
# 数据表报错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操作](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_24853.html)：
   
   | 配置项                  | 参考值                    |
   |:---|:---|
   | max_threads          | CPU核数\*2               |
   | background_pool_size | CPU核数                  |
   | merge_max_block_size | 8192的整数倍，根据CPU内存资源大小调整 |
   | cleanup_delay_period | 适当小于默认值 30             |
      
   
 
#### 修改parts_to_throw_insert值
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/caution_3.0-zh-cn.png)
增大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';**
