本文介绍了 SQL 洞察页面的基本信息,包括 SQL 统计信息、性能监控、租户级请求分析、性能监控和 SQL 列表。
统计信息
在 统计信息 区域,您可以根据时间进行筛选,查看当前实例内可疑 SQL 和 SlowSQL 的数量,以及各租户下的对应数量。单击租户名称,系统会在下方的租户诊断信息区域联动展示该租户在对应时间段内的诊断信息详情。
性能监控
在 性能监控 区域,您可以根据时间进行筛选,查看集群 SQL 性能相关信息。
查看请求分析
单击租户行右侧的 查看请求分析 按钮,查看 SQL 的执行耗时分布和请求执行情况。
查看性能监控
单击租户行右侧的 查看性能监控,查看租户的性能监控数据。
租户诊断信息
您可以通过租户名后的下拉箭头选择租户,查看该租户的 TopSQL、SlowSQL、可疑 SQL、高危 SQL 和 新增 SQL 的诊断信息。
目前,系统对标准版(Key-Value)集群实例有如下限制:
对于版本号大于等于 4.2.4 但小于 4.3.0 的 KV 集群实例,支持显示 TopSQL 和 SlowSQL 的诊断信息。
对于其他版本的 KV 集群实例,仅支持显示 SlowSQL 的诊断信息。
支持通过 数据库、节点、时间范围、 SQL ID、SQL 文本、快速筛选 等对 SQL 列表进行筛选。
时间范围:支持查看 近 5 分钟、近 30 分钟、近 1 小时、近 6 小时 的数据。您也可以自定义时间,但是需要注意以下限制:
最大范围限定:选择的时间范围不得超过 24 小时。
最小范围限定:
3天内:选择的时间范围不少于 1 分钟。
3至7天内:选择的时间范围不少于 5 分钟。
超过7天:选择的时间范围不少于 20 分钟。
快速筛选:支持 全表扫描、多分区扫描、远程执行多、硬解析、存在执行报错 和 存在重试执行。
如果默认显示的筛选条件无法满足需求,您可以添加更多条件进行筛选。
单击不同列表项中的 图标,可以基于该列的排序整理列表。
列表中的展示列支持自定义,单击 列管理 即可展示支持筛选的所有列。
可单击右上方的 导出 ,下载对应 SQL 列表。
单击 SQL 文本可以查看 SQL 诊断详情,包括 SQL 文本、物理执行计划、SQL 执行历史、表信息 及 高级设置 等。
打开 聚合 in 查询,将会聚合 in 查询的结果,但不影响统计数据。在列表中可以看到 聚合 标识,将指针放在对应 SQL ID 可查看聚合的其他 SQL ID。
对于包含 IN 子句且内容由不同数量简单常量组成的 SQL 语句,如果未启用“聚合 in 查询”,SQL 诊断功能会将它们视为不同类型的 SQL 语句;如果启用了“聚合 in 查询”,SQL 诊断功能会将它们视为相同类型的 SQL 语句,并将这些 SQL 语句的统计信息聚合到同一行中。
TopSQL
TopSQL 是指在指定时间范围内整体响应时间最长的 SQL 语句。
单击快捷筛选项,例如 全表扫描、多分区扫描 等,快速识别出需要优化的 SQL。
单击 操作 列的 查看样本,可以查看该 SQL 语句。
单击 SQL 文本前的 +,查看 最后一次报错 和 统计时段内报错汇总。
单击列表右上方的 查看优化建议,可跳转至优化中心查看优化建议。
单击列表右上方的 TopSQL 对比,可以对比相同 SQL 在同一个节点的不同时段或在不同节点上的运行情况。
不同时段对比:将同一节点上相同 SQL 在基准和对比时段的运行情况进行对比,然后查看 明细数据对比 和 性能趋势对比 信息。
不同节点对比:将相同 SQL 在基准节点与其他节点的运行情况进行对比,然后查看 明细数据对比 和 响应时间趋势对比 信息。
说明相同 SQL 是指相同的数据库和 SQL ID。
当不同节点对比时,只有不同节点上执行相同 SQL 才会输出结果。
除指定租户外,您还可以对集群内所有租户的 TopSQL 进行实时诊断。
当发现某个节点 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、数据库、诊断结果 等信息。
高危 SQL
高危 SQL 是指可能对系统性能、安全及数据造成危害的 SQL 语句。以下是目前可识别的高危 SQL 类型:
操作描述 | 示例 | 高危类型 | 说明 |
新增或删除列 |
| 表结构变更-新增/删除列 | - |
删除表或数据库 |
| 删除表/数据库 | - |
清空表 |
| 清空数据表 | - |
更新不带条件 |
| 更新不带条件 | - |
更新条件恒为真 |
| 更新条件恒为真 | - |
删除不带条件 |
| 删除不带条件 | - |
删除条件恒为真 |
| 删除条件恒为真 | - |
返回行数过大 |
| 返回行数过大 |
|
影响行数过大 |
| 影响行数过大 |
|
参与分区数过多 |
| 参与分区数过大 |
|
in 条件过多 | where id in (1,2,3,4,5.....) | in 条件过多 | - |
索引变更 |
| 高危变更-索引变更 | - |
高危 SQL 页签展示了 SQL 文本、数据库、危险原因 等信息。
新增 SQL
新增 SQL 是指在查询区间往前一段时间(默认 7 天)没有执行过,但是在查询区间内有执行记录的 SQL 语句。
新增 SQL 页签展示了 SQL 文本、SQL ID、数据库、总执行次数 等信息。