SQL 基本信息

本文介绍了 SQL 洞察页面的基本信息,包括 SQL 统计信息、性能监控、租户级请求分析、性能监控和 SQL 列表。

统计信息

统计信息 区域,您可以根据时间进行筛选,查看当前实例内可疑 SQL 和 SlowSQL 的数量,以及各租户下的对应数量。单击租户名称,系统会在下方的租户诊断信息区域联动展示该租户在对应时间段内的诊断信息详情。

image

性能监控

性能监控 区域,您可以根据时间进行筛选,查看集群 SQL 性能相关信息。

image

查看请求分析

单击租户行右侧的 查看请求分析 按钮,查看 SQL 的执行耗时分布和请求执行情况。image

查看性能监控

单击租户行右侧的 查看性能监控,查看租户的性能监控数据。image

租户诊断信息

您可以通过租户名后的下拉箭头选择租户,查看该租户的 TopSQLSlowSQL可疑 SQL高危 SQL新增 SQL 的诊断信息。

说明

目前,系统对标准版(Key-Value)集群实例有如下限制:

  • 对于版本号大于等于 4.2.4 但小于 4.3.0 的 KV 集群实例,支持显示 TopSQLSlowSQL 的诊断信息。

  • 对于其他版本的 KV 集群实例,仅支持显示 SlowSQL 的诊断信息。

  • 支持通过 数据库节点时间范围SQL IDSQL 文本快速筛选 等对 SQL 列表进行筛选。

    • 时间范围:支持查看 近 5 分钟近 30 分钟近 1 小时近 6 小时 的数据。您也可以自定义时间,但是需要注意以下限制:

      • 最大范围限定:选择的时间范围不得超过 24 小时。

      • 最小范围限定:

        • 3天内:选择的时间范围不少于 1 分钟。

        • 3至7天内:选择的时间范围不少于 5 分钟。

        • 超过7天:选择的时间范围不少于 20 分钟。

    • 快速筛选:支持 全表扫描多分区扫描远程执行多硬解析存在执行报错存在重试执行

    • 如果默认显示的筛选条件无法满足需求,您可以添加更多条件进行筛选。

  • 单击不同列表项中的 image.png 图标,可以基于该列的排序整理列表。

  • 列表中的展示列支持自定义,单击 列管理 即可展示支持筛选的所有列。

  • 可单击右上方的 导出 ,下载对应 SQL 列表。

  • 单击 SQL 文本可以查看 SQL 诊断详情,包括 SQL 文本物理执行计划SQL 执行历史表信息高级设置 等。

  • 打开 聚合 in 查询,将会聚合 in 查询的结果,但不影响统计数据。在列表中可以看到 聚合 标识,将指针放在对应 SQL ID 可查看聚合的其他 SQL ID。

    对于包含 IN 子句且内容由不同数量简单常量组成的 SQL 语句,如果未启用“聚合 in 查询”,SQL 诊断功能会将它们视为不同类型的 SQL 语句;如果启用了“聚合 in 查询”,SQL 诊断功能会将它们视为相同类型的 SQL 语句,并将这些 SQL 语句的统计信息聚合到同一行中。

    image

TopSQL

TopSQL 是指在指定时间范围内整体响应时间最长的 SQL 语句。

image

  • 单击快捷筛选项,例如 全表扫描多分区扫描 等,快速识别出需要优化的 SQL。

  • 单击 操作 列的 查看样本,可以查看该 SQL 语句。

  • 单击 SQL 文本前的 +,查看 最后一次报错统计时段内报错汇总image

  • 单击列表右上方的 查看优化建议,可跳转至优化中心查看优化建议。

  • 单击列表右上方的 TopSQL 对比,可以对比相同 SQL 在同一个节点的不同时段或在不同节点上的运行情况。

    • 不同时段对比:将同一节点上相同 SQL 在基准和对比时段的运行情况进行对比,然后查看 明细数据对比性能趋势对比 信息。image

    • 不同节点对比:将相同 SQL 在基准节点与其他节点的运行情况进行对比,然后查看 明细数据对比响应时间趋势对比 信息。

      说明
      • 相同 SQL 是指相同的数据库和 SQL ID。

      • 当不同节点对比时,只有不同节点上执行相同 SQL 才会输出结果。

  • 除指定租户外,您还可以对集群内所有租户的 TopSQL 进行实时诊断。image

  • 当发现某个节点 CPU 负载过高时,可以先筛选 数据库节点,然后根据 CPU 时间 对 SQL 进行降序排序,从而识别出最需要优化的 SQL。

    image

SlowSQL

SlowSQL 是指执行时间超过 500ms 的 SQL 语句。

image

  • 单击快捷筛选项,例如 全表扫描多分区扫描 等,快速识别出需要优化的 SQL。

  • 单击 操作 列的 查看样本,可以查看该 SQL 语句。

可疑 SQL

可疑 SQL 是指根据规则、算法筛选出的可能导致性能问题的 SQL 语句。以下是常见的诊断结果及处理建议:

诊断结果

处理建议

Hint 未生效

异常 SQL,需要 DBA 确认是否使用 OUTLINE 进行执行计划固化。

全表扫描性能较差

请分析执行计划和表结构,确认 SQL 有合适的索引可用。

走索引但性能比较低

请确认业务场景是否可以接受此性能,若不可接受请改进业务逻辑或优化索引。

性能比以前下降

请确认数据分布变化、请求量突涨、执行计划变化等情况。

执行计划变动且性能下降

需 DBA 确认,可使用 OUTLINE 进行执行计划固化,以判断是否为异常 SQL。

执行次数突刺

需确认业务量,可能导致整体性能下降。

CPU 负载过高

请确认业务场景、数据分布变化、请求量突涨、执行计划变化等情况。

疑似锁冲突

SQL 存在重试,可能是锁冲突导致,请排查业务逻辑,是否存在锁冲突场景。

DML 访问过多分区数

请改写 SQL,保证 SQL 能进行分区裁剪。

疑似 Buffer 表

请确认相关表是否在频繁更新。

疑似存在大小账号

请排查是否存在数据倾斜问题。

执行计划不稳定

请排查是否存在计划恶化的问题。

计划生成时间过长

请排查是否存在计划命中率低等问题。

可疑 SQL 页签展示了 SQL 文本SQL ID数据库诊断结果 等信息。

image

高危 SQL

高危 SQL 是指可能对系统性能、安全及数据造成危害的 SQL 语句。以下是目前可识别的高危 SQL 类型:

操作描述

示例

高危类型

说明

新增或删除列

  • alter table test drop column id

  • alter table test add new_id int not null comment '新id'

表结构变更-新增/删除列

-

删除表或数据库

  • drop table test

  • drop database test

删除表/数据库

-

清空表

truncate table test

清空数据表

-

更新不带条件

update test set new_id =1

更新不带条件

-

更新条件恒为真

update test set new_id =1 where 1 = 1

更新条件恒为真

-

删除不带条件

delete from test

删除不带条件

-

删除条件恒为真

delete from test where 1=1

删除条件恒为真

-

返回行数过大

max_return_rows >= 50000

返回行数过大

max_return_rows用于设置最大返回行数,若超过设定的值则会被认定为高危 SQL。

影响行数过大

max_affected_rows >= 50000

影响行数过大

max_affected_rows用于设置最大影响行数,若超过设定的值则会被认定为高危 SQL。

参与分区数过多

max_partition_cnt >2000

参与分区数过大

max_partition_cnt用于设置最大参与分区数,若超个设定的值则会被认定为高危 SQL。

in 条件过多

where id in (1,2,3,4,5.....)

in 条件过多

-

索引变更

drop index idx2 on test_high_risk2

高危变更-索引变更

-

高危 SQL 页签展示了 SQL 文本数据库危险原因 等信息。

image

新增 SQL

新增 SQL 是指在查询区间往前一段时间(默认 7 天)没有执行过,但是在查询区间内有执行记录的 SQL 语句。

image

新增 SQL 页签展示了 SQL 文本SQL ID数据库总执行次数 等信息。