SQL Pattern 对比

更新时间:
复制 MD 格式

SQL Pattern对比用于分析同一云原生数据仓库 AnalyticDB MySQL 版集群在两个时间窗口内的SQL Pattern差异,帮助定位新增或变化的SQL Pattern,缩小性能问题排查范围。

功能介绍

SQL Pattern对比用于分析同一集群在两个时间窗口内的SQL Pattern差异,支持:

  • 查看目标窗口中新出现的 SQL Pattern。

  • 查看两个窗口均出现、但执行次数或资源消耗在目标窗口增长的 SQL Pattern。

  • 按执行次数、CPU Cost、Shuffle 数据量、峰值内存和数据读取量五个维度查看并排序候选 SQL Pattern。

SQL Pattern 对比会异步生成一份可重复查看的报告。报告用于缩小排查范围,不能单独证明 SQL 是集群性能问题的根因。确定根因时,还需要结合执行计划、表结构、数据分布、业务变更和集群监控等信息。

目前支持创建报告、查看报告列表、查看报告详情和取消未完成报告。

前提条件

  • 已创建AnalyticDB for MySQL企业版、基础版或湖仓版集群。

  • 当前阿里云账号或 RAM 用户具备访问目标集群和使用 SQL Pattern 对比功能的权限。

  • 所选时间窗口内存在可用于分析的 SQL 访问数据。没有符合条件的数据时,报告可以正常完成,但对应维度的结果可能为空。

使用限制

  • 目前仅在华南1(深圳)和新加坡地域开放。

  • 对比时间1和对比时间2必须属于同一个集群。

  • 每个窗口的开始时间必须早于结束时间,单个窗口最长为 24 小时。

  • 两个窗口可以不连续,也可以长度不同。为了提高可比性,建议使用长度相同、业务周期相近的两个窗口。

  • 同一集群同一时间最多存在一份未完成的报告。已有报告处于等待中或生成中时,不能再次创建。

  • 报告创建后不能修改集群、报告类型或时间窗口。如需调整条件,请重新创建报告。

  • 报告结果保留 7 天。报告过期后不再出现在可用报告列表中,也不能查看详情。

  • 报告按阿里云主账号隔离。在具备集群访问权限的前提下,同一主账号下的 RAM 用户共享该账号创建的报告,不同主账号之间不可见。

重要

SQL Pattern 中的字面量会被参数化为 ?,但数据库名、表名和列名等标识符可能仍然保留。参数化不等同于完整匿名化,请按照组织的数据安全规范使用和分享报告。

核心概念

对比时间1和对比时间2

  • 对比时间1:基准窗口,用于表示变化前或参照时段。

  • 对比时间2:目标窗口,用于表示需要重点分析的时段。

建议将已确认存在流量、延迟或资源波动的时段放在时间2,并优先选择以下窗口:

  • 今天与昨天的同一时段。

  • 今天与上周同一天的同一时段。

  • 发布前与发布后的等长时段。

  • 流量切换前与切换后的等长时段。

说明

如果两个窗口长度不同,总量类指标会天然受到窗口时长影响。此时应同时查看活跃分钟均值、单分钟峰值和执行次数,避免只根据总量判断变化程度。

报告类型

报告类型

含义

适用场景

新增

时间2出现、时间1未出现的 SQL Pattern。

排查发布、流量切换或业务变化后新增的 SQL。

变化

两个窗口均出现,并且在当前分析维度下,时间2的活跃分钟均值高于时间1的 SQL Pattern。

排查已有 SQL 的调用量或资源消耗增长。

重要
  • 新增不等同于异常。新增报告只说明 SQL Pattern 在两个窗口之间的出现关系,仍需结合业务预期判断是否需要处理。

  • 变化报告的候选集合与当前分析维度有关。同一 SQL Pattern 可能在执行次数维度出现,但在峰值内存维度不出现。

SQL Pattern

SQL Pattern 是参数化后的 SQL 模板。结构相同、仅参数值不同的 SQL 会归入同一个 Pattern,便于按模板聚合执行次数和资源消耗。每个 Pattern 都有稳定的 Pattern Hash,可用于识别同一个 SQL 模板。

分析维度

一次报告固定计算以下五个维度。创建报告时无需选择维度,查看详情时再切换当前维度。

分析维度

说明

执行次数

SQL Pattern 的执行次数。

CPU Cost

SQL Pattern 的 Operator Cost,不等同于精确 CPU 时间。

Shuffle 数据量

SQL Pattern 产生的 Shuffle 数据量。

峰值内存

SQL Pattern 的峰值内存消耗。

数据读取量

SQL Pattern 的扫描数据量。

变化程度

变化类型报告根据当前维度的活跃分钟均值变化率划分变化程度:

时间2相对时间1的活跃分钟均值变化率

变化程度

0% < 变化率 <= 20%

轻微

20% < 变化率 <= 50%

中度

50% < 变化率 <= 100%

高度

变化率 > 100%

极度

时间1为 0、时间2大于 0

极度(零基线增长)

使用说明

创建对比报告

  1. 登录AnalyticDB MySQL版控制台,选择地域并进入目标集群。在左侧导航栏,选择诊断优化> SQL诊断优化,然后单击SQL Pattern 对比页签。

  2. 选择报告类型:

    • 关注发布或流量切换后出现的新 SQL 时,选择新增。

    • 关注已有 SQL 的调用量或资源消耗是否增长时,选择变化。

  3. 设置对比时间1和对比时间2的开始时间与结束时间。

  4. 确认目标集群、报告类型和时间窗口后,单击开始对比。

提交前,建议确认:

  • 时间1是基准窗口,需要分析的目标时段位于时间2。

  • 每个窗口不超过 24 小时。

  • 两个窗口尽量等长且业务周期相近。

创建成功后,系统会返回报告 ID,并在后台异步生成结果。创建成功不表示报告已经完成,您可以稍后在报告列表中查看状态。窗口越长、查询量越大、Pattern 数量越多,生成时间通常越长,系统不承诺固定完成时长。

说明

如果系统提示当前集群已有未完成报告,请等待现有报告完成,或确认不再需要后取消该报告。请勿连续重复提交创建请求。

查看报告和状态

报告列表展示当前阿里云主账号可见且未过期的报告。

状态

含义

可执行操作

等待中

报告已创建,正在等待后台任务开始。

等待或取消。

生成中

后台正在生成五个维度的结果。

等待或取消。

已完成

报告结果已经生成。

查看详情。

说明

生成失败、已取消或已过期的报告不会继续显示在可用报告列表中。

取消报告

等待中或生成中的报告可以取消。取消前请确认目标集群和报告 ID 正确,并确认报告已不再需要。

取消成功后,报告及已生成结果会失效,不再出现在报告列表中,且操作不可恢复。已完成的报告不能取消,会继续保留至到期。

说明

如果取消请求因网络异常而结果未知,请先刷新报告列表确认状态,不要直接重复提交取消请求。

查看并解读报告结果

报告完成后,进入详情并选择分析维度。结果数量表示当前维度和筛选条件下的 SQL Pattern 数量,不是五个维度的合计数量。

新增报告详情

新增报告展示时间2中新增 SQL Pattern 的总量、活跃分钟均值、单分钟峰值、占比和排序等信息,不展示时间1指标或变化率。

新增 SQL 不一定存在风险。建议先确认它是否符合发布、流量切换或业务变更预期,再根据累计影响和单分钟峰值决定是否继续分析。

变化报告详情

变化报告同时展示时间1和时间2的指标,并提供活跃分钟均值、总量和单分钟峰值的变化率。

报告是否包含某个 Pattern,以及变化程度如何划分,均以当前维度的活跃分钟均值增长为准。总量变化率和单分钟峰值变化率用于辅助判断,不影响变化程度划分。

时间 1 指标值为 0、时间 2 大于 0 时,该 Pattern 属于零基线增长,将归入“极度变化”。如需排除此类 Pattern,请设置变化率上限。

活跃分钟均值、总量和单分钟峰值

  • 活跃分钟均值按该 Pattern 实际出现过的分钟桶计算,不是用整个窗口的总分钟数直接做除法。

  • 总量反映窗口内的累计影响,比较不同长度窗口时需要谨慎。

  • 单分钟峰值表示最大分钟桶,用于识别低频但某一分钟内影响较高的 SQL Pattern,不代表单条 SQL 的最大值。

  • 低频或周期性 SQL 应结合活跃分钟均值、总量和单分钟峰值和执行次数一起判断。

分析建议

建议按照以下顺序分析:

  1. 选择与集群异常现象最相关的分析维度。

  2. 优先查看累计影响较高的 Pattern,同时保留对低频单分钟峰值的关注。

  3. 对变化报告检查活跃分钟均值变化率,并识别零基线增长。

  4. 结合 Pattern 文本和 Pattern Hash 确认 SQL 类型与业务用途。

  5. 使用执行计划、表结构、数据分布和业务变更记录验证根因。

说明

报告只覆盖新增 Pattern 和当前维度增长的变化 Pattern。长期存在但两个窗口间没有增长的高消耗 SQL 可能不会出现在报告中,空结果也不能证明集群中不存在其他性能问题。

OpenAPI接口

API Action

用途

CreateSqlPatternCompareReport

创建 SQL Pattern 对比报告。

DescribeSqlPatternCompareReports

查询当前主账号可见的报告列表。

DescribeSqlPatternCompareReport

查询报告详情。

CancelSqlPatternCompareReport

取消可取消的报告。

调用时请注意:

  • 时间字段使用 UTC 分钟级格式 yyyy-MM-ddTHH:mmZ,例如 2026-08-18T08:00Z。

  • 报告类型使用 NEW 或 CHANGED。

  • 详情分析维度使用 QUERY_COUNT、CPU_COST、SHUFFLE_SIZE、PEAK_MEMORY 或 SCAN_SIZE。

  • 详情请求可通过 IncludePattern 控制是否返回参数化后的 SQL Pattern 文本;设置为 false 时仍返回 Pattern Hash 和指标。

  • 当前版本不支持 Lang 参数。

完整请求参数、分页方式、返回参数和错误码,请参见对应 OpenAPI 参考文档。

常见问题

创建时提示当前集群已有未完成报告怎么办?

同一集群同一时间最多有一份未完成报告。请在报告列表中查找等待中或生成中的报告,等待其完成,或确认不再需要后取消。

创建成功后为什么不能立即查看详情?

报告在后台异步生成。请等待列表状态变为已完成后再查看详情。

报告生成时间为什么比较长?

报告需要读取两个窗口的 SQL 访问数据,并完成五个维度的聚合。窗口越长、查询量和 Pattern 数量越多,生成时间通常越长。

为什么不同分析维度的结果数量不一致?

变化报告会针对当前维度筛选时间2活跃分钟均值高于时间1的 Pattern。不同维度的增长集合不同,因此结果数量和明细内容可能不同。

为什么报告详情为空?

可能是当前报告类型下没有符合定义的 Pattern、当前维度没有增长的 Pattern,或所选窗口内没有可用 SQL 访问数据。空详情不等同于创建失败,请先确认报告状态、类型、分析维度和筛选条件。

为什么报告从列表中消失?

报告可能已经取消、生成失败或超过 7 天有效期。此类报告不会继续显示在可用报告列表中。

为什么看不到其他账号创建的报告?

报告按阿里云主账号隔离。当前主账号只能查看本账号范围内创建的报告,不同主账号之间不可见。

报告能否直接证明某条 SQL 是性能问题根因?

不能。报告用于发现新增或增长的 SQL Pattern 候选。根因仍需结合执行计划、表结构、数据分布、集群监控和业务变更记录确认。

问题反馈

需要技术支持协助时,请提供地域、集群 ID、报告 ID、报告类型、两个对比时间窗口、当前分析维度、操作时间、请求 ID、错误码、错误信息和问题截图。这些信息有助于缩短问题定位时间。