tidb查询耗时异常

【 TiDB 使用环境】生产环境
【 TiDB 版本】v4.0.10
【复现路径】
【遇到的问题:问题现象及影响】
SQL执行耗时异常
分区表查询扫描无数据的分区耗时异常
【资源配置】
【附件:截图/日志/监控】
SQL:
SELECT
xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx
FROM
test_table
WHERE
(
aaaa IN (
‘xxx’,‘xxx’,‘xxx’
)
)
AND (
date IN (
‘xxx’,‘xxx’,‘xxx’
)
);

异常执行计划 (142.9 KB)

其他分区扫描都是几十ms的表现
扫描上述的无数据分区到40min

该如何排查

参考下官方文档就可以了

https://docs.pingcap.com/zh/tidb/stable/dashboard-slow-query#tidb-dashboard-慢查询页面
https://docs.pingcap.com/zh/tidb/stable/dashboard-statement-details#慢查询


执行计划中有stats:pseudo关键字说明表的统计信息不准了,重新收集下统计信息吧

没看懂

所以这个建议有啥实际效果嘛?

不太能理解,执行计划准or not。一个空分区为啥会耗时40min

我看执行计划中的索引选择是符合预期的。

想要掌握优化方式呢,就对着慢慢看,一条条的排查就好了

要是有拿不准的,可以继续询问

一个空分区。扫描耗时40min

不是很确定问题所在。希望帮忙分析一下。

分区的裁减到了 5.X 之后才支持的,实际上 6.5 LTS 才成熟

全局分区索引也是类似的,如果你对分区这块有很高的要求,可以考虑升级版本(建议升级前,先做测试)

不明所以。。。

https://docs.pingcap.com/zh/tidb/v4.0/partition-pruning#分区裁剪

你是不是tidb黑子?

aaaa,date 是联合索引吗?

上面的aaaa字段和date是联合主键。

SELECT
xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx,xxx
FROM
test_table
WHERE
(
aaaa =‘xxx’

AND (
date IN (
‘xxx’,‘xxx’,‘xxx’
)
);
这样改写是不是就快了

6.5 版本的支持会好很多,要不要试一下~

所以我是再问SQL改写是么。。。

提点有建设性的建议,谢谢。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。