【 TiDB 使用环境】生产环境
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
workflow.sql (19.7 KB)
去掉if执行计划.xlsx (18.5 KB)
为去掉执行计划.xlsx (18.4 KB)
表象上加了if一行就会走磁盘
【 TiDB 使用环境】生产环境
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
计算得移出sql 你这个sql是每行计算 都砸在tidb了
要怎么改这个sql?
没有中间层,可以帮你做这些计算么,还是场景上必须用 SQL 来实现?
必须用sql,这个还好吧
对比俩执行计划,好像是因为排序刷盘导致变慢的
if为啥走排序算法啊,搞不懂啊
提前把if条件计算出来。
怎么提前?
能简单举个例子吗?
建个虚拟列 把总计时常 应出假期 改成虚拟列 提前算好
简单举个例子啊,有点不懂,大佬
去掉后
└─Sort_132 390.23 410417 root time:36.3s, loops:402 heytea.orgstdstruct.unitcode, heytea.rbsj.gh, heytea.rbsj.sjrq 409.6 MB 0 Bytes
没去掉
└─Sort_132 390.23 410417 root time:2m29s, loops:402 heytea.orgstdstruct.unitcode, heytea.rbsj.gh, heytea.rbsj.sjrq 410.2 MB 466.9 MB
没去掉的时候,sort落盘了。 disk 大小是 466.9 MB
翻了下,使用一旦sort算子落盘,会使用外排序。
然后从当时的pr提交的性能报告来看,确实会造成比较大的性能回退。大概回退4-12倍。
https://github.com/pingcap/tidb/pull/14279
另外,我还是觉得你这个sql应该跑在tiflash上。
加了,但是跑不上去啊,要怎么办?
https://docs.pingcap.com/zh/tidb/v6.5/sql-plan-replayer#使用-plan-replayer-导出集群信息
如果方便的话,可以保存一份现场执行信息,我在我自己的集群上调调看。这个里面包含一些集群的参数,表结构,和统计信息。zip你自己也可以打开看看,感觉不合适的内容你可以删掉。
如果不方便就算了。
重点检查mpp开了没开(没有mpp不能下推hashjoin到tiflash执行),是否有某些表在查询中但没有tiflash副本。
我这边不方便下载
好的。对着mpp的文档仔细看看吧。
其实不因该很复杂,正常查询sql内所有的表都有tiflash副本,外加会话级设置一下,强制mpp。就能应该能看到一部分是走mpp的。
你这个执行计划是基本没有tiflash的部分在里面。我感觉还是这两个条件有哪一个没有满足。这个应该不难找的。
没有走tifalsh证明系统判断tiflash也没用,我是这么理解的,我感觉这个问题不一定在tifalsh
你这个sql是把几个最多2000w左右的表聚合到1.4w行上去。就是tiflash+mpp的适合的场景。
优化器到底是没有这么选,还是有什么设置所以不能这么做。我不清楚。
要不 tidb_enforce_mpp 强制 mpp 试试