文档

SQL 诊断概述

更新时间:

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

统计信息

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

image

性能监控

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

image

查看请求分析

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

查看性能监控

单击租户行右侧的 查看性能监控,可查看租户的监控数据信息。性能监控..png

租户诊断信息

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

  • 通过 数据库节点关键词时间范围 对 SQL 列表进行筛选,也支持通过 高级搜索 进行更多指标的匹配筛选。如下示例中, 通过关键词 CREATE 和高级搜索条件 总数据库耗时 > 200ms,筛选出了相应的 TopSQL 记录。

    image

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

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

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

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

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

    存在一类文本中包含 IN 子句的 SQL,并且 IN 子句的内容都为简单常量。在不开启聚合 In 查询的时候,IN 子句中常量个数不同时,SQL 诊断会将其视为不同的 SQL;当开始聚合 In 查询时,SQL 诊断会将其视为同一类 SQL,将这些 SQL 的信息统一汇总到一行记录上。

    image.png

TopSQL

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

image

  • TopSQL 分析提供了一些常用的快捷筛选,例如 全表扫描多分区扫描等,帮助用户快速找到有异常或者需要优化的SQL。

  • TopSQL 支持通过点击展开查看最后一次错误以及所有发生过的错误信息。

    image

  • 单击列表右上方的 查看优化建议,您将会跳转到优化中心页面查看优化建议。

  • 单击列表右上方的 TopSQL对比,可以对比相同 SQL 在同一个主机节点的不同时段或在不同主机节点上的运行状态及表现。

    • 不同时段对比:将同一个主机节点上的相同 SQL 在基准时段和对比时段的运行情况进行对比。基准时段和对比时段均可自定义,选择需要对比的分析节点,单击 对比分析 可查看 SQL 在同一个主机节点的不同时段运行的 明细数据对比性能趋势对比 信息。image

    • 不同节点对比:以基础节点上运行的 SQL 为基准对比相同 SQL 在其他节点上的运行情况。其中对比节点可以选择多个,如果多选,系统会取这些节点上运行的 SQL 交集的平均数据与基准节点上的相同 SQL 进行对比分析。选择或自定义一个分析时段后,单击 对比分析 可查看相同 SQL 在不同节点上运行的 明细数据对比响应时间趋势对比 信息。

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

      • 机器之间执行对比,输出的是这些主机上相同 SQL 的明细和响应时间趋势。如果基准节点与对比节点上没有执行相同的 SQL,则不会输出结果。

  • TopSQL 功能除了支持对选定租户进行实时诊断,还支持对集群内所有租户的 TopSQL 进行实时诊断。

    image

  • 当发现某台主机 CPU 负载过高时,可以通过节点进行筛选,再根据 CPU 时间倒叙进行 SQL 排序,从而找到最值得优化的 SQL。

    说明

    筛选节点的场景下,暂不支持数据库过滤。

    image

SlowSQL

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

image

  • SlowSQL 分析提供了一些常用的快捷筛选,例如 全表扫描多分区扫描等。

  • 单击 SlowSQL 操作列的 查看样本,可以查看该 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 分析提供了一些常用的快捷筛选,例如 全表扫描多分区扫描等。

  • 本页导读 (0)
文档反馈