百思不得其解: 监控面板SQL语句分析和慢查询

请问监控面板里面的SQL语句分析和慢查询,怎么语句不一样,而且执行时间耗时也不一样,我们观察今天SQL语句慢是看慢查询还是SQL语句分析呢?相信哪个呢?


一个是单条sql耗时,一个是一段时间内同类sql的平均耗时,当然不一样

即使是一段时间内同类SQL的累计耗时,旁边还有一个平均耗时列,这个平均耗时也不止678ms吧?那也应该体现在慢查询里,然而并没有。

而且还有一个执行次数是1次,也相当于是单条查询。

你慢sql按照总执行时间排序看下 没有那条慢sql吗?

两个功能的「统计维度、筛选逻辑、数据范围」完全不同,
「慢查询」解决 “单点极端问题”,「SQL 语句分析」解决 “整体资源占用问题” ,观察今天的 SQL 慢,优先以「慢查询」定位具体问题 SQL,再用「SQL 语句分析」二者结合才能全面覆盖性能问题

图上已经是按总执行时间排序的。

你再看看 明明是按运行时间排序的

确实没有排序。

正解,维度不一样

不一样的指标

慢查询日志默认存储在 TiDB 节点的 log 目录下(文件名为 tidb_slow_query.log ),日志包含以下核心信息:

  • SQL 语句文本;
  • 执行时间、扫描行数、返回行数;
  • 执行计划(plan 字段);
  • 事务隔离级别、TSO 获取时间等。

TiDB 监控中SQL 语句分析和慢查询的差异是统计口径、采集范围、展示形式 不同导致的,没有 “谁更可信”,而是场景互补

总体而言慢查询是 “单点病例”,记录单条 SQL 的完整生病过程,适合定位具体根因

SQL 语句分析是 “群体体检报告”,汇总所有 SQL 的健康状况,适合发现整体性能问题

1 个赞

肯定是看慢查询面板,不过需要注意的是:
1、慢查询面板统计的是已经执行完的sql语句,如果一个sql执行很慢,超过慢查询设置的阈值,但是尚未执行完,那么该面板不会显示该sql
2、sql语句分析面板显示的应该是执行的所有sql,维度中还有执行次数,要看平均耗时是否达到慢查询阈值,然后等你的sql执行完你在检查下慢查询面板是否有对应语句

慢查询是默认300ms以上的sql记录到慢查询日志
sql语句分析是对一段时间执行的sql采样

另外考虑方面不一样,一个看起来很快的sql,比如100ms就能执行出来,但是每秒执行几千次,也可能有性能问题,可以优化到10ms,这种在慢查询就看不到

explain analyze出来看下和那个一样

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