OB 查询变慢了,新手该从哪几步开始排查慢 SQL?

【 使用环境 】测试环境
【 OB 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

4 个赞

支持

1 个赞

当遇到 OceanBase 查询变慢的情况时,可以通过以下步骤来排查慢 SQL 问题:

根因分析场景: SQL性能问题

根因分析命令:

obdiag rca run --scene=perf_sql --env "{db_connect='-h127.0.0.1 -P2881 -utest@test -p****** -Dtest', trace_id='Yxx'}"

日志采集场景: SQL性能问题

日志采集命令:

obdiag gather scene run --scene=observer.perf_sql --env "{db_connect='-h127.0.0.1 -P2881 -utest@test -p****** -Dtest', trace_id='Yxx'}"

解释

  1. 根因分析命令:该命令用于分析 SQL 性能问题,特别是当您已经有一个具体的 SQL 语句或事务 ID 时。通过指定数据库连接信息和 trace_id,可以深入分析该 SQL 语句的执行情况。
  2. 日志采集命令:该命令用于收集与 SQL 性能相关的日志信息,包括 SQL 执行计划、性能统计等,帮助您了解 SQL 语句的执行过程和性能瓶颈。

建议步骤

  1. 确定慢 SQL:首先,确定哪些 SQL 语句执行变慢。可以通过查看 gv$sql_audit 视图或使用 OCP 监控工具来找到执行时间较长的 SQL 语句。
  2. 使用 obdiag 进行根因分析:运行上述根因分析命令,输入具体的 SQL 语句或事务 ID,以获取详细的性能分析报告。
  3. 收集日志:运行上述日志采集命令,收集相关日志信息,以便进一步分析。
  4. 检查 SQL 优化:查看 SQL 语句的执行计划,确保索引使用合理,避免全表扫描等低效操作。
  5. 系统资源监控:检查系统资源使用情况,如 CPU、内存、IO 等,确保没有资源瓶颈。
  6. 参数调优:根据性能分析报告,调整相关参数,如 sql_work_area_sizeparallel_degree 等,以优化 SQL 执行性能。

需要提供的信息

为了更准确地帮助您诊断问题,请提供以下信息:

  1. 慢 SQL 语句的具体内容及其执行时间。
  2. 当前数据库的负载情况,包括并发数、TPS 等。
  3. 系统资源使用情况,特别是 CPU、内存、IO 的使用率。
  4. 是否有最近的配置变更或数据量增长。
  5. 是否有其他异常现象,如网络延迟、磁盘故障等。

希望以上信息能帮助您快速定位和解决慢 SQL 问题。如果您需要进一步的帮助,请随时联系我。

附上敏捷诊断工具 obdiag 使用帮助链接

2 个赞

看执行计划→查分区裁剪→检索引→控数据量→避排序关联→看资源→查长事务

2 个赞

对于SQL问题,除了文中提到的方法,还可以考虑问题和obdiag的结合使用。

1 个赞