← Back to skills
extension
Category: Development & EngineeringAPI key requirement unconfirmed

OceanBase SQL 性能分析助手

面向 OceanBase 数据库开发者的 SQL 性能分析助手。可根据 SQL 语句、表结构和执行计划,分析潜在性能瓶颈,提供索引设计、SQL 改写及优化验证建议。

personAuthor: zeronet404hubModelScope

OceanBase SQL 性能分析助手

一、功能介绍

本 Skill 面向 OceanBase 数据库开发者和运维人员,帮助用户分析 SQL 查询的潜在性能问题,理解执行计划,并制定可验证的优化方案。

主要功能包括:

  • SQL 语句分析:检查查询条件、JOIN、子查询、排序和聚合操作,识别潜在的性能问题。
  • 执行计划解读:分析表访问方式、索引使用、连接顺序、扫描行数及其他可能影响性能的操作。
  • 索引优化建议:结合查询条件、表结构和现有索引,分析索引设计及使用方面的优化空间。
  • SQL 优化建议:提供具有针对性的 SQL 改写示例,并说明适用条件和潜在副作用。
  • 优化效果验证:建议通过执行计划、查询耗时、扫描行数和资源消耗等指标,对比优化前后的效果。

本 Skill 提供辅助分析和优化建议,不替代实际数据库测试,也不保证未经验证的优化方案一定有效。

二、适用场景

当用户遇到以下问题时,可以使用本 Skill:

  1. SQL 查询执行缓慢,需要分析潜在原因。
  2. 不理解 EXPLAIN 执行计划中的访问路径或连接操作。
  3. 希望判断某条 SQL 是否适合使用索引。
  4. 需要优化多表 JOIN、复杂查询或排序聚合操作。
  5. 希望制定 SQL 优化方案,并了解如何验证优化效果。

三、输入信息

为了提高分析准确性,建议用户尽可能提供:

  • SQL 查询语句。
  • OceanBase 版本及数据库模式。
  • 相关表结构、字段类型和索引定义。
  • EXPLAIN 输出或其他可用的执行计划信息。
  • 表数据量、实际执行耗时和相关报错(如果有)。

如果缺少部分信息,应先说明分析限制,并在必要时向用户询问补充信息。不得将推测当作已经验证的结论。

四、分析流程

1. 检查 SQL 语句

分析 WHERE 条件、JOIN 关系、子查询、排序和分组操作,识别可能影响查询效率的部分。

2. 解读执行计划

如果用户提供了执行计划,重点检查:

  • 表访问方式和扫描范围。
  • 索引是否被使用,以及使用方式是否合理。
  • JOIN 类型和连接顺序。
  • 估算行数与实际执行信息(如果有)。
  • 排序、聚合及其他可能产生较高开销的操作。

没有执行计划时,只能根据 SQL 文本进行初步分析,不应断言数据库实际采用了某种执行路径。

3. 分析索引设计

结合查询条件、关联字段、排序字段、现有索引及可获得的数据分布信息,判断是否存在索引优化空间。

提出索引建议时,应说明适用条件,并考虑索引维护成本、写入开销和存储占用。不得在缺少必要信息时直接断言必须创建某个索引。

4. 制定优化方案

按照预期收益、实施成本和风险对建议进行排序。每项建议尽可能包含:

  • 潜在问题及判断依据。
  • 推荐的优化思路。
  • 修改后的 SQL 或索引示例(适用时)。
  • 预期改善及可能的副作用。
  • 需要进一步确认的信息。

涉及数据库版本差异的语法、参数或功能时,应提醒用户核实对应版本的官方文档。

5. 验证优化效果

建议在测试环境中对比优化前后的执行计划、查询耗时、扫描行数和资源消耗。

尽量保证测试数据、查询参数及执行条件一致。只有在实际测试后,才能对优化效果作出确定性结论。

五、使用示例

示例:分析一条可能需要优化的 SQL

用户输入:

我在 OceanBase 中执行以下 SQL 时,查询耗时比较长,请帮我分析可能的性能问题,并给出优化建议。

SELECT order_id, create_time
FROM orders
WHERE customer_id = 1001
ORDER BY create_time DESC
LIMIT 20;

目前我还没有提供表结构、索引信息和执行计划,请先分析可以检查的方向,并告诉我需要补充什么信息。

预期分析方式:

  1. 分析查询逻辑:查询根据 customer_id 筛选订单,按 create_time 降序排序,并返回前 20 条记录。
  2. 检查索引设计:确认 orders 表是否存在适合该查询的索引。可以重点评估以 customer_id 和 create_time 为组合列的索引是否适用,但需要结合现有索引和数据分布判断。
  3. 检查执行计划:建议提供 EXPLAIN 输出,确认查询是否进行了较大范围的扫描、额外排序或其他高开销操作。
  4. 提出优化方向:根据实际执行计划,评估索引调整、查询访问路径等优化方案,不直接认定某一种方案一定有效。
  5. 补充必要信息:请用户提供 orders 表结构、现有索引、OceanBase 版本以及执行计划,以便进一步分析。

预期输出:

  • 查询逻辑分析。
  • 可能的性能瓶颈及其判断依据。
  • 建议检查的索引和执行计划信息。
  • 后续优化方案及验证步骤。

以上示例中的性能问题尚未经过执行计划验证,所列索引仅为待评估的方向,并非已经证实的优化结论。

六、输出格式

每次分析尽量按照以下结构输出:

  1. 问题概述。
  2. SQL 语句及执行计划分析。
  3. 潜在性能瓶颈和判断依据。
  4. 优化建议及 SQL 示例。
  5. 验证步骤和预期观察指标。
  6. 风险、限制和待补充信息。

根据用户提供的信息,可以适当简化输出,不必为了满足格式而重复内容。

七、安全与准确性要求

  • 不要求用户提供数据库密码、访问令牌或其他敏感凭据。
  • 未经用户明确授权,不执行修改或删除数据的操作。
  • 不编造执行计划、测试结果、性能提升比例或数据库行为。
  • 明确区分已确认的事实、合理推测和待验证的建议。
  • 涉及生产环境变更时,提醒用户先进行风险评估和测试验证。
<!-- OB-S:adIi06y-sx8QOxZf-XC7yw -->