1230万的分区 DAG response is too big, please check config about region size or region merge scheduler

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】

【概述】 场景 + 问题概述

【背景】 做过哪些操作

【现象】 业务和数据库现象

【问题】 #时间改成 Report_Date>= ‘2021-08-01’ AND Report_Date< ‘2021-08-25’ 是可以成功的 数据量少一些的话
SELECT Report_Date,Img_Path,mrc.Material_Type,mrc.Material_Name,mrc.Material_Original_Name,mrc.Spec_Material_Id,mrc.Material_Id,Agent_Material_Id,mrc.Spec_Id
,GROUP_CONCAT(DISTINCT ‘(’,mrc.Spec_Id,’)’,Spec_Name ORDER BY mrc.Spec_Id SEPARATOR ‘、’) AS Spec_Name
FROM
Spec_Material_Report_Cost mrc
WHERE Report_Date>= ‘2021-08-01’ AND Report_Date< ‘2021-08-28’
GROUP BY mrc.Spec_Material_Id

错误代码: 1105
[FLASH:Coprocessor:Internal] DAG response is too big, please check config about region size or region merge scheduler

执行计划

id estRows task access object operator info
Projection_6 259564.36 root yixintui_operate.spec_material_report_cost.report_date, yixintui_operate.spec_material_report_cost.img_path, yixintui_operate.spec_material_report_cost.material_type, yixintui_operate.spec_material_report_cost.material_name, yixintui_operate.spec_material_report_cost.material_original_name, yixintui_operate.spec_material_report_cost.spec_material_id, yixintui_operate.spec_material_report_cost.material_id, yixintui_operate.spec_material_report_cost.agent_material_id, yixintui_operate.spec_material_report_cost.spec_id, Column#44
└─HashAgg_7 259564.36 root group by:Column#60, funcs:group_concat(distinct “(”, Column#48, “)”, Column#49 order by Column#50 separator “、”)->Column#44, funcs:firstrow(Column#51)->yixintui_operate.spec_material_report_cost.report_date, funcs:firstrow(Column#52)->yixintui_operate.spec_material_report_cost.img_path, funcs:firstrow(Column#53)->yixintui_operate.spec_material_report_cost.material_type, funcs:firstrow(Column#54)->yixintui_operate.spec_material_report_cost.material_name, funcs:firstrow(Column#55)->yixintui_operate.spec_material_report_cost.material_original_name, funcs:firstrow(Column#56)->yixintui_operate.spec_material_report_cost.spec_material_id, funcs:firstrow(Column#57)->yixintui_operate.spec_material_report_cost.material_id, funcs:firstrow(Column#58)->yixintui_operate.spec_material_report_cost.agent_material_id, funcs:firstrow(Column#59)->yixintui_operate.spec_material_report_cost.spec_id
└─Projection_20 324455.45 root cast(yixintui_operate.spec_material_report_cost.spec_id, var_string(20))->Column#48, yixintui_operate.spec_material_report_cost.spec_name, yixintui_operate.spec_material_report_cost.spec_id, yixintui_operate.spec_material_report_cost.report_date, yixintui_operate.spec_material_report_cost.img_path, yixintui_operate.spec_material_report_cost.material_type, yixintui_operate.spec_material_report_cost.material_name, yixintui_operate.spec_material_report_cost.material_original_name, yixintui_operate.spec_material_report_cost.spec_material_id, yixintui_operate.spec_material_report_cost.material_id, yixintui_operate.spec_material_report_cost.agent_material_id, yixintui_operate.spec_material_report_cost.spec_id, yixintui_operate.spec_material_report_cost.spec_material_id
└─TableReader_13 324455.45 root data:Selection_12
└─Selection_12 324455.45 cop[tiflash] ge(yixintui_operate.spec_material_report_cost.report_date, “2021-08-01”), lt(yixintui_operate.spec_material_report_cost.report_date, “2021-08-28”)
└─TableFullScan_11 12978218.00 cop[tiflash] table:mrc, partition:p202108 keep order:false, stats:pseudo

【业务影响】

【TiDB 版本】
5.1.1
【应用软件及版本】
5.1.2 已经修复
【附件】 相关日志及配置信息

  • TiUP Cluster Display 信息
  • TiUP CLuster Edit config 信息

监控(https://metricstool.pingcap.com/)

  • TiDB-Overview Grafana监控
  • TiDB Grafana 监控
  • TiKV Grafana 监控
  • PD Grafana 监控
  • 对应模块日志(包含问题前后 1 小时日志)

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

  1. 可以升级 master, 让 group_concat 下推到 tiflash 执行,会加速,并且避免这个问题;
  2. 或者改配置来解除这个问题。

升级到哪个版本 ? 改哪个配置参数?

nightly

这是生产环境,直接升级nightly 不好吧, 有别的处理方式吗

  1. 改一下标题,跟 group_concat 无关,直接 DAG response is too big, please check config about region size or region merge scheduler 这个
  2. 确认一下,你那边是用lightning 或者其他工具导入数据的么?

没有 ,就是正常的 java 处理 , 跟 group_concat关系很大 ,没有 group_concat 的话 一个月统计没问题 。
1个 group_concat的话 能跑20多天数据
原始sql 多个group_concat 的话 只能跑 5天的数据 。 (这个原始sql昨天跑8月份的数据还没问题的, 今天才出现问题 )

通过改什么参数能解决这个问题吗? 我们试试 看看

先查一下库里有没有大的 region

  1. 查看当前集群中 region size tiup ctl:vx.x.x pd -u pdip:pdport -i region topsize limit 10
  2. 查看 approximate size (MB) 的大小,如果非常大,可以手工 split
    operator add split-region 1 --policy=approximate // 将 Region 1 对半拆分成两个 Region,基于粗略估计值
    operator add split-region 1 --policy=scan // 将 Region 1 对半拆分成两个 Region,基于精确扫描值

都是默认值,需要都拆分吗

不用,这些都不是很大,那可能不是 region size 太大的问题。

补充当前pd 配置

补充监控图

昨天重做了一下表 9月份改成 按天分区了 ,Spec_Material_Report_Cost 9月份的跑18天没问题
8月份没有改 直接导回数据了 。 跑10天的数据就查询不出来 。

昨天的表备份表 Spec_Material_Report_Cost_20210917_bak 直接跑一个月的就没问题 ,

这个分区是不是确实有问题 , 1200多万数据 分析表花了31分钟 SHOW STATS_HEALTHY 看也是有问题的 。
ANALYZE TABLE yixintui_operate.Spec_Material_Report_Cost PARTITION p202108;
今天 10:21
31.7 min

image
image

也就是说 9 月份数据不管分没分区,运行都是没有问题的?9月份还没完,数据量还有一半呢
8 月份不是分区表,运行 10 天的都不行是吧?

Spec_Material_Report_Cost 都是一张分区表 ,8月是 按月分区 ,9月是按天分区

Spec_Material_Report_Cost_20210917_bak 是原来的分区表 ,所有月份按月分区 。 新表的数据都是从这个备份表 insert 进去的, (只有部分新数据在新表有 ,这个备份表没有继续更新维护了)
image

理解了。
你先看看 select tidb_allow_batch_cop 的值是多少,然后 set global tidb_allow_batch_cop = 1 或者 2 试试。

另外一种方法试试改写query,把 group_concat 其他可以下推的部分写到一个子查询,这样有些操作就可以下推到 tiflash,减少数据传输量。

方便电话联系一下 吗? 我给你发过私信 。
(user:tidbdba time: 15:06)[db: yixintui_operate]select @@tidb_allow_batch_cop;
±-----------------------+
| @@tidb_allow_batch_cop |
| 1 |
我重建了一个新的分区表 8月也按天分区 , 目前把8月的数据导入进去 多个group_concat 查询正常 。
image

  1. 不方便呢
  2. 你把 tidb_allow_batch_cop 改为 2 试试?
  3. select max(size) from information_schema.tiflash_segments where tidb_table =“Spec_Material_Report_Cost”; 查查 tiflash data segment 的最大值看看

max(size) 都是0
image