SQL Pattern

SQL Pattern

更新时间:

云原生数据仓库 AnalyticDB MySQL 版 的实时统计分析功能提供了 SQL Pattern 指标特性,有效提升智能诊断效率,能够对相似的 SQL 进行聚合,并呈现出聚合后的特性。

背景信息

SQL Pattern 是依托于全量且实时的 SQL 而产生的功能,通过对 SQL 进行分类、诊断和分析,聚合相似 SQL 为一类 SQL,有效提升智能诊断的效率。同时,SQL Pattern 的聚合结果能作为数据库优化的有效依据。针对导致实例压力过大的 Bad SQL,用户还可以通过拦截功能,对其进行拦截,快速恢复实例,详情请参见 Persist plan and Query-Blocker

功能说明

SQL Pattern 具备以下功能。

  • Pattern 聚合:根据 SQL 文本,将相似的 SQL 进行分组。

  • Pattern 宏观统计:建立均值与最值比较以及每个 Pattern 关键指标的总量及其占比。

  • 异常 SQL 排查:排查出异于历史的 Pattern 并提供钻取功能,直达问题 SQL,获取诊断结果。

注意事项

仅支持查看过去 14 天内的 SQL Pattern 记录,每次查询的时间范围最长为 24 小时。

操作步骤

  1. 登录 云原生数据仓库 AnalyticDB MySQL 控制台 ,在左上角选择集群所在地域。在左侧导航栏,单击 集群列表 ,在 数仓版 页签,单击目标集群 ID。

  2. 在左侧导航栏,单击 诊断与优化

  3. 单击 SQL Pattern 页签。

    默认展示最近 30 分钟的 SQL Pattern。您可以通过 SQL 关键字或时间范围搜索 SQL Pattern。

    SQL Pattern 列表各项参数说明如下:

    参数

    说明

    操作

    单击 查看详情 ,查看特定 SQL Pattern 的详细信息。更多信息,请参见 Pattern 分析

    用户名

    提交 Pattern 相关 SQL 的数据库用户名。

    客户端 IP

    提交 Pattern 相关 SQL 的客户端 IP 地址。

    SQL Pattern

    SQL Pattern 的具体语句。您可以单击 2 复制完整的 SQL。

    CPU Cost 总量

    在查询时间范围内,Pattern 相关 SQL 执行时占用 CPU 的总时间。括号中的百分比表示该 Pattern 执行时占用 CPU 的总时间占所有 Pattern 执行时占用 CPU 的总时间的比例,若比例超过 30%将自动高亮显示。

    通过观察 Pattern CPU Cost 占比,可以初步判断该时段内某类查询对 CPU 消耗的影响是否较大,您也可以结合 CPU 监控指标 进一步分析。

    点击查看 CPU Cost 总量占比的计算方法

    假设有 5 SQL(分别为:SQL1、SQL2、SQL3、SQL4、SQL5),SQL1、SQL2、SQL3 属于 Pattern1;SQL4、SQL5 属于 Pattern2。SQL1、SQL2、SQL3、SQL4、SQL5 对应的 CPU Cost 50 ms,1 s,70 ms,1.5 s,1 s。则:

    • Pattern1 CPU Cost 总量 1.12 s。计算方法为 0.05‬s+1s+0.07s=1.12s

    • Pattern2 CPU Cost 总量 2.5 s。计算方法为 1.5‬s+1s=2.5s

    • Pattern1 CPU Cost 总量占比 30.9392%。计算方法为 1.12/(1.12+2.5)*100%=30.9392%

    • Pattern2 CPU Cost 总量占比 69.0607%。计算方法为 2.5/(1.12+2.5)*100%=69.0607%

    峰值内存总量

    在查询时间范围内,Pattern 相关 SQL 使用的峰值内存总和。括号中的百分比表示该 Pattern 峰值内存总和占所有 Pattern 峰值内存总和的比例,若比例超过 30%将自动高亮显示。

    通过观察 Pattern 的峰值内存占比,可以初步判断该时段内某类查询对内存消耗的影响是否较大,您也可以结合 计算内存使用率监控指标 进行进一步分析。

    点击查看峰值内存总量占比的计算方法

    假设有 5 SQL(分别为:SQL1、SQL2、SQL3、SQL4、SQL5),SQL1、SQL2、SQL3 属于 Pattern1;SQL4、SQL5 属于 Pattern2。SQL1、SQL2、SQL3、SQL4、SQL5 对应的峰值内存为 1 GB,2 GB,3 GB,3 GB,1 GB。则:

    • Pattern1 的峰值内存总量 6 GB。计算方法为 1 GB+2 GB+3GB=6 GB

    • Pattern2 的峰值内存总量 4 GB。计算方法为 1 GB+3 GB=4 GB

    • Pattern1 的峰值内存总量占比 60%。计算方法为 6/(6+4)*100%=60%

    • Pattern2 的峰值内存总量占比 40%。计算方法为 4/(6+4)*100%=40%

    耗时总量

    在查询时间范围内,Pattern 相关 SQL 的执行耗时总和。括号中的百分比表示该 Pattern 的执行耗时总和占所有 Pattern 执行耗时总和的比例,若比例超过 30%将自动高亮显示。

    通过观察 Pattern 的执行耗时占比,可以初步判断该时段内某类查询对查询 RT 监控指标增长的影响是否较大,您也可以结合 查询 RT 监控指标 进一步分析。

    点击查看耗时总量占比的计算方法

    假设有 5 SQL(分别为:SQL1、SQL2、SQL3、SQL4、SQL5),SQL1、SQL2、SQL3 属于 Pattern1;SQL4、SQL5 属于 Pattern2。SQL1、SQL2、SQL3、SQL4、SQL5 对应的耗时为 50 ms,1 s,70 ms,1.5 s,1 s。则:

    • Pattern1 的耗时总量 1.12 s。计算方法为 0.05‬s+1s+0.07s=1.12s

    • Pattern2 的耗时总量 2.5 s。计算方法为 1.5‬s+1s=2.5s

    • Pattern1 的耗时总量占比 30.9392%。计算方法为 1.12/(1.12+2.5)*100%=30.9392%

    • Pattern2 的耗时总量占比 69.0607%。计算方法为 2.5/(1.12+2.5)*100%=69.0607%

    数据读取总量

    在查询时间范围内,Pattern 相关 SQL 读取数据的总量。括号中的百分比表示该 Pattern 读取数据总量占所有 Pattern 读取数据总量的比例,若比例超过 30%将自动高亮显示。

    通过观察 Pattern 的读取数据占比,可以初步判断该时段内某类查询的数据读取量是否较大,您也可以结合 表读取结果数据量监控指标 进一步分析。

    点击查看数据读取总量占比的计算方法

    假设有 5 SQL(分别为:SQL1、SQL2、SQL3、SQL4、SQL5),SQL1、SQL2、SQL3 属于 Pattern1;SQL4、SQL5 属于 Pattern2。SQL1、SQL2、SQL3、SQL4、SQL5 对应的数据读取量为 1 GB,2 GB,3 GB,3 GB,1 GB。则:

    • Pattern1 的数据读取总量 6 GB。计算方法为 1 GB+2 GB+3GB=6 GB

    • Pattern2 的数据读取总量 4 GB。计算方法为 1 GB+3 GB=4 GB

    • Pattern1 的数据读取总量占比 60%。计算方法为 6/(6+4)*100%=60%

    • Pattern2 的数据读取总量占比 40%。计算方法为 4/(6+4)*100%=40%

    数据读取 Cost 总量

    在查询时间范围内,Pattern 相关 SQL 读取数据时占用 CPU 的总时间。括号中的百分比表示该 Pattern 读取数据占用 CPU 的总时间占所有 Pattern 读取数据占用 CPU 总时间的比例,若比例超过 30%将自动高亮显示。

    通过观察 Pattern 的读取数据占比,可以初步判断该时段内某类查询的读取数据时占用 CPU 的总时间是否较大。如果读取数据时占用 CPU 的总时间增大,则会影响预留节点(存储节点)的 CPU 使用率,您也可以结合 预留节点 CPU 监控指标 原存储节点 CPU 监控指标 进一步分析。

    点击查看数据读取 Cost 总量占比的计算方法

    假设有 5 SQL(分别为:SQL1、SQL2、SQL3、SQL4、SQL5),SQL1、SQL2、SQL3 属于 Pattern1;SQL4、SQL5 属于 Pattern2。SQL1、SQL2、SQL3、SQL4、SQL5 对应的数据读取 Cost 50 ms,1 s,70 ms,1.5 s,1 s。则:

    • Pattern1 的数据读取 Cost 总量 1.12 s。计算方法为 0.05‬s+1s+0.07s=1.12s

    • Pattern2 的数据读取 Cost 总量 2.5 s。计算方法为 1.5‬s+1s=2.5s

    • Pattern1 的数据读取 Cost 总量占比 30.9392%。计算方法为 1.12/(1.12+2.5)*100%=30.9392%

    • Pattern2 的数据读取 Cost 总量占比 69.0607%。计算方法为 2.5/(1.12+2.5)*100%=69.0607%

    平均 CPU Cost

    在查询时间范围内,Pattern 相关 SQL 执行时占用 CPU 时间的均值。

    最大 CPU Cost

    在查询时间范围内,Pattern 相关 SQL 执行时占用 CPU 时间的最大值。

    平均表读取 CPU Cost

    在查询时间范围内,Pattern 相关 SQL 读取数据时占用 CPU 时间的均值。

    最大表读取 CPU Cost

    在查询时间范围内,Pattern 相关 SQL 的读取数据时占用 CPU 时间的最大值。

    执行次数

    在查询时间范围内,Pattern 相关 SQL 的执行次数。如果实例出现资源水位突增的情况,用户可以通过执行次数排序,查看实例运行异常时段哪些 SQL 执行次数较多,并进一步分析这些 SQL 执行次数突增是否正常。

    失败次数

    在查询时间范围内,Pattern 相关 SQL 的执行失败次数。

    平均总耗时

    在查询时间范围内,Pattern 相关 SQL 的平均查询耗时,单位毫秒(ms)。

    最大总耗时

    在查询时间范围内,Pattern 相关 SQL 的最大查询耗时,单位毫秒(ms)。通过比较最大总耗时和平均查询时间,可以了解指定 Pattern 的耗时增加是否受到其他 SQL 的影响。如果在实例运行正常时段内最大总耗时和平均查询时间接近,那么在实例运行异常时段当前 pattern 的耗时增加可能是受到了其他 SQL 的影响。

    平均执行耗时

    在查询时间范围内,Pattern 相关 SQL 的平均执行耗时,单位毫秒(ms)。

    最大执行耗时

    在查询时间范围内,Pattern 相关 SQL 的最大执行耗时,单位毫秒(ms)。执行耗时的定义,详见 查询监控图和 SQL 列表介绍

    平均峰值内存

    在查询时间范围内,Pattern 相关 SQL 的平均峰值内存,单位 Byte。

    最大峰值内存

    在查询时间范围内,Pattern 相关 SQL 的最大峰值内存,单位 Byte。通过比较最大峰值内存和平均峰值内存,您可以判断指定 SQL 使用的内存资源的稳定性。如果最大峰值内存远大于平均峰值内存,说明当前 Pattern SQL 可能存在扫描数据量增加或者执行计划改变的问题,可以单击 查看详情 ,在 查询详情 页面,查看 SQL 列表进一步定位原因。

    平均扫描量

    在查询时间范围内,Pattern 相关 SQL 的平均扫描量,单位 MB。

    最大扫描量

    在查询时间范围内,Pattern 相关 SQL 的最大扫描量,单位 MB。通过比较最大扫描量和平均扫描量,可以判断同类 Pattern SQL 的数据读取量的稳定性。如果出现最大扫描量远大于平均扫描量的情况,说明数据读取量不稳定,则需判断是否为正常情况。

    表名

    SQL Pattern 扫描的数据库表。

Pattern 分析

Pattern 分析 页面以图形化的方式展示 SQL 在时间维度上的执行次数、查询耗时、执行耗时、扫描量以及峰值内存等重要指标,其中查询耗时、执行耗时、扫描量和峰值内存指标分别提供了最大值和平均值,方便用户进行比较和分析。SQL 列表提供了当前 Pattern 在分析时段内的所有相关的 SQL,您可以单击 诊断 ,查看 SQL 的诊断结果和执行计划,具体操作,参见 使用执行计划分析查询

SQL Pattern 页签的 SQL Pattern 列表中,单击 查看详情 ,进入 Pattern 分析 页面,您可以查看 SQL Pattern 多个指标的时序变化和 SQL 列表。

相关 API