SQL 诊断功能旨在分析和诊断 TopSQL、SlowSQL 和可疑 SQL,帮助您优化数据库性能。
基本概念
SQL 诊断的基本概念如下:
TopSQL:是指在指定时间范围内整体响应时间最长的 SQL 语句。
SlowSQL:是指执行时间超过 500ms 的 SQL 语句。
可疑 SQL:是指根据规则、算法筛选出的可能导致性能问题的 SQL 语句。
目前,系统对标准版(Key-Value)集群实例有如下限制:
对于版本号大于等于 4.2.4 但小于 4.3.0 的 KV 集群实例,支持显示 TopSQL 和 SlowSQL 的诊断信息。
对于其他版本的 KV 集群实例,仅支持显示 SlowSQL 的诊断信息。
TopSQL
TopSQL 是指在指定时间范围内整体响应时间最长的 SQL 语句。
单击快捷筛选项,例如 全表扫描、多分区扫描 等,快速识别出需要优化的 SQL。
单击 操作 列的 查看样本,可以查看该 SQL 语句。
单击 SQL 文本前的 +,查看 最后一次报错 和 统计时段内报错汇总。
单击列表右上方的 查看优化建议,可跳转至优化中心查看优化建议。
单击列表右上方的 TopSQL 对比,可以对比相同 SQL 在同一个节点的不同时段或在不同节点上的运行情况。
不同时段对比:将同一节点上相同 SQL 在基准和对比时段的运行情况进行对比,然后查看 明细数据对比 和 性能趋势对比 信息。
不同节点对比:将相同 SQL 在基准节点与其他节点的运行情况进行对比,然后查看 明细数据对比 和 响应时间趋势对比 信息。
说明相同 SQL 是指相同的数据库和 SQL ID。
当不同节点对比时,只有不同节点上执行相同 SQL 才会输出结果。
当发现某个节点 CPU 负载过高时,可以先筛选 数据库 和 节点,然后根据 CPU 时间 对 SQL 进行降序排序,从而识别出最需要优化的 SQL。
SlowSQL
SlowSQL 是指执行时间超过 500ms 的 SQL 语句。
单击快捷筛选项,例如 全表扫描、多分区扫描 等,快速识别出需要优化的 SQL。
单击 操作 列的 查看样本,可以查看该 SQL 语句。
可疑 SQL
可疑 SQL 是指根据规则、算法筛选出的可能导致性能问题的 SQL 语句。以下是常见的诊断结果及处理建议:
诊断结果 | 处理建议 |
Hint 未生效 | 异常 SQL,需要 DBA 确认是否使用 OUTLINE 进行执行计划固化。 |
全表扫描性能较差 | 请分析执行计划和表结构,确认 SQL 有合适的索引可用。 |
走索引但性能比较低 | 请确认业务场景是否可以接受此性能,若不可接受请改进业务逻辑或优化索引。 |
性能比以前下降 | 请确认数据分布变化、请求量突涨、执行计划变化等情况。 |
执行计划变动且性能下降 | 需 DBA 确认,可使用 OUTLINE 进行执行计划固化,以判断是否为异常 SQL。 |
执行次数突刺 | 需确认业务量,可能导致整体性能下降。 |
CPU 负载过高 | 请确认业务场景、数据分布变化、请求量突涨、执行计划变化等情况。 |
疑似锁冲突 | SQL 存在重试,可能是锁冲突导致,请排查业务逻辑,是否存在锁冲突场景。 |
DML 访问过多分区数 | 请改写 SQL,保证 SQL 能进行分区裁剪。 |
疑似 Buffer 表 | 请确认相关表是否在频繁更新。 |
疑似存在大小账号 | 请排查是否存在数据倾斜问题。 |
执行计划不稳定 | 请排查是否存在计划恶化的问题。 |
计划生成时间过长 | 请排查是否存在计划命中率低等问题。 |
可疑 SQL 页签展示了 SQL 文本、SQL ID、数据库、诊断结果 等信息。