sql的执行计划不解

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

【概述】 场景 + 问题概述
oltp环境,在今天下午16:10左右出现sql执行时间变长问题,相关信息如下:
1,dashboard中相关sql如下

2,sql在生成执行计划过程中占用大部分时间

3,此sql正常情况下执行如下

4,监控中出现


image

我们已经设置了max_execution_time参数为30秒

我想问一下:
1,我们设置了max_execution_time为30秒,但是对这个sql还有那个 ANALYZE并没有生效,但是我查询文档却是此参数对所有类型sql生效,那我们是有什么地方遗漏吗?
image

2,此sql的执行计划中,是在生成执行计划这个阶段占用时间了,那这说明什么问题呢?是在tidb层还是在tikv层呢?与统计信息是否相关(上面有个分析表的sql运行时间很长,是否因为在更新统计信息导致)?请帮忙分析一下,谢谢!

3,analyze table为什么会执行这长时间呢?我们的表并不大,数据量如下:

【背景】 做过哪些操作

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

【问题】 当前遇到的问题

【业务影响】

【TiDB 版本】
v5.1.1

【应用软件及版本】

【附件】 相关日志及配置信息

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

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

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

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

1、可以看下慢查询基本信息,有一项是 SQL 是否执行成功,如果超时 kill 掉,会显示为 0 即执行失败,从监控看,当时有很多 Failed Query,可能是被 kill 的,不排除当时 TiDB 负载过高,导致 kill 请求卡住执行慢。
2、生成执行计划这个阶段占用时间高通常是 TiDB Server 负载过高导致,看看当时的 CPU Load,再查一下问题出现时的慢查询,是否有执行计划走错的情况,analyze 应该只是受影响,监控上16:05 之后好像就出现问题而 analyze 是16:14才开始执行 。

可以参考相关文档辅助排查
https://docs.pingcap.com/zh/tidb/stable/analyze-slow-queries/

2 个赞

sql执行成功了,如下图

执行计划中耗时如下,这好像是tikv节点有问题了

1 个赞

可以结合 TiKV-Details 监控再看看 Coprocessor 相关耗时

tikv-details中发现下面指标有些高

image

image

是因为在读取数据时有相关等待或是锁(meet_lock指标高)或是在analyze语句在执行,所以导致读取(全表扫或是索引扫慢或是等待了),可以这样理解吗?

补充下监控

目前是解析慢 单个语句的解析慢,不是tikv的慢

与查询的预耗时慢导致的

image

这是sql 他逻辑有点问题 ,不管自查询是否返回值 都是 1 其实

生成执行计划慢体现在 TiDB 监控上是 Executor - Compile Duration 高,一般是 TiDB CPU 负载过高导致,可以检查 slow query 有没有扫描比较多 keys 的大 SQL。

问题找到了,底层存储延迟高导致,感谢各位。

底层存储延迟高?是啥原因延迟高?如何进行解决?

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