首批通过分布式安全可靠测评,为关键业务系统打造
SQL 追踪
更新时间:2026-04-07 20:57:20
SQL 追踪(SHOW TRACE)是 OceanBase 数据库提供的一种性能分析工具,能够交互式的提供上一次执行的 SQL 请求执行过程中调用链路情况,以及链路中各阶段耗时情况,以便进行性能分析或调优。
SQL 追踪的作用
性能调优需求
- 复杂查询优化:当 SQL 执行缓慢时,通过追踪可快速定位问题(如全表扫描、
JOIN顺序不当)。 - 资源竞争分析:识别锁等待、并发冲突等导致延迟的问题。
- 索引有效性验证:判断查询是否命中索引,或是否存在冗余索引。
问题诊断场景
- 慢查询定位:通过
ELAPSE_TIME找出耗时最长的子任务。 - 索引缺失:如果
inner_execute_read耗时异常,可能表示未使用索引。 - 分布式任务异常:检查
do_local_das_task的耗时是否均衡,避免单点性能瓶颈。
系统稳定性保障
- 预防性维护:通过定期追踪关键 SQL,提前发现潜在性能风险。
- 故障复盘:在生产环境出现异常时,结合 Trace 日志快速复现问题。
使用 SQL 追踪
SHOW TRACE 功能默认是关闭的,可通过 Session 变量 ob_enable_show_trace 来控制其打开和关闭。
操作步骤
步骤一:开启当前会话的 SQL 追踪功能
示例如下:
SET ob_enable_show_trace = 1;
步骤二:执行目标 SQL
示例如下:
创建表
t1。CREATE TABLE t1(c1 INT, c2 INT, c3 INT);向表中插入数据。
INSERT INTO t1 VALUES(1,1,1),(2,2,2);查看表
t1的数据库。SELECT/*+PARALLEL(2)*/ COUNT(*) FROM t1;返回结果如下:
+----------+ | COUNT(*) | +----------+ | 2 | +----------+ 1 row in set
步骤三:查看 Trace 信息
使用 SHOW TRACE; 语句显示上一次 SQL 的追踪结果。
示例如下:
SHOW TRACE;
返回结果如下:
+-------------------------------------------------------+---------------------+-------------+
| OPERATION | START_TIME | ELAPSE_TIME |
+-------------------------------------------------------+---------------------+-------------+
| com_query_process | 2023/03/07 16:27:43 | 5241 µs |
| └── mpquery_single_stmt | 2023/03/07 16:27:43 | 5208 µs |
| ├── sql_compile | 2023/03/07 16:27:43 | 4149 µs |
| │ ├── pc_get_plan | 2023/03/07 16:27:43 | 108 µs |
| │ └── hard_parse | 2023/03/07 16:27:43 | 3952 µs |
| │ ├── parse | 2023/03/07 16:27:43 | 97 µs |
| │ ├── resolve | 2023/03/07 16:27:43 | 492 µs |
| │ ├── rewrite | 2023/03/07 16:27:43 | 598 µs |
| │ ├── optimize | 2023/03/07 16:27:43 | 2022 µs |
| │ │ ├── inner_execute_read | 2023/03/07 16:27:43 | 485 µs |
| │ │ │ ├── sql_compile | 2023/03/07 16:27:43 | 140 µs |
| │ │ │ │ └── pc_get_plan | 2023/03/07 16:27:43 | 81 µs |
| │ │ │ ├── open | 2023/03/07 16:27:43 | 43 µs |
| │ │ │ ├── get_das_id | 2023/03/07 16:27:43 | 17 µs |
| │ │ │ └── do_local_das_task | 2023/03/07 16:27:43 | 107 µs |
| │ │ └── close | 2023/03/07 16:27:43 | 66 µs |
| │ │ ├── close_das_task | 2023/03/07 16:27:43 | 17 µs |
| │ │ └── end_transaction | 2023/03/07 16:27:43 | 6 µs |
| │ ├── code_generate | 2023/03/07 16:27:43 | 197 µs |
| │ └── pc_add_plan | 2023/03/07 16:27:43 | 74 µs |
| └── sql_execute | 2023/03/07 16:27:43 | 979 µs |
| ├── open | 2023/03/07 16:27:43 | 19 µs |
| ├── response_result | 2023/03/07 16:27:43 | 768 µs |
| │ ├── get_das_id | 2023/03/07 16:27:43 | 0 µs |
| │ └── do_local_das_task | 2023/03/07 16:27:43 | 358 µs |
| └── close | 2023/03/07 16:27:43 | 145 µs |
| └── close_das_task | 2023/03/07 16:27:43 | 19 µs |
+-------------------------------------------------------+---------------------+-------------+
27 rows in set
关键字段说明:
| 字段 | 含义 |
|---|---|
| OPERATION | SQL 执行的具体阶段(如 parse、optimize、do_local_das_task)。 |
| START_TIME | 该阶段的开始时间(用于分析时间线)。 |
| ELAPSE_TIME | 该阶段的耗时(单位为微秒 µs),用于定位性能瓶颈。 |
相关文档
- 关于 SQL 调优的详细介绍信息,参见 SQL 调优概览。
- 关于设置是否使用 Show Trace 日志的详细介绍信息,参见 ob_enable_show_trace。