首批通过分布式安全可靠测评,为关键业务系统打造
Show Trace
更新时间:2026-05-13 16:59:39
Show Trace 功能能够交互式展示上一次执行的 SQL 请求执行过程中调用链路情况,以及链路中各阶段耗时情况,以便进行性能分析或调优,可以使用 Show Trace 功能便捷地找到性能瓶颈点。
版本约束
OceanBase 数据库:V4.2.0 及以上版本
ODP:V4.2.0 及以上版本
OCP:V4.0.3 及以上版本
注意事项
OceanBase 数据库自 V4.2.0 开始支持 Show Trace 功能,基于 OceanBase 2.0 协议。关于该功能请注意以下几点。
当使用兼容的组件版本时,可以在会话(Session)级别通过功能开关启用 Show Trace 功能。开启后,ODP 和 OceanBase 数据库将对后续执行的每一条 SQL 记录详细的交互信息。SQL 执行完成后,只需执行
show trace;命令,即可查看上一条 SQL 所生成的诊断信息。Show Trace 功能默认关闭。因为基于协议传递的诊断信息会带来额外的解析、传输、记录处理的开销,对性能不友好,所以默认情况下各组件不会记录 Show Trace 信息。
Show Trace 功能的正常运行依赖于协议承载和交互。当组件版本不兼容或功能关闭时,将导致 SQL 执行或诊断信息记录异常,具体场景包括:
当 OceanBase 数据库不支持或已关闭 Show Trace 功能时,该能力将无法使用。
当 OceanBase 数据库支持并开启 Show Trace 功能,而 ODP 不支持该功能时,执行
show trace;命令后,仅能获取 OceanBase 数据库的交互信息。当 OceanBase 数据库和 ODP 均支持且已开启 Show Trace 功能时,执行 Show Trace 命令后,可以获取上一条 SQL 的交互信息,包括 ODP 与 OceanBase 数据库之间的交互内容。
操作步骤
步骤一:配置 ODP
使用 root@sys 用户通过 ODP 登录 OceanBase 集群,并执行如下操作。
开启 ODP 与 OceanBase 数据库间的 OceanBase 2.0 协议
该操作使 ODP 可以获取到 OBServer 节点的统计信息,有如下两种设置方法。
方法一:配置 server_protocol 值为
Auto,并配置 enable_single_leader_node_routing 值为False。obclient> alter proxyconfig set server_protocol = 'Auto'; obclient> alter proxyconfig set enable_single_leader_node_routing = False;方法二:直接配置 server_protocol 值为
OceanBase 2.0。obclient> alter proxyconfig set server_protocol = 'OceanBase 2.0';
开启 ODP 自身的 trace 统计
通过设置 enable_full_link_trace 为
True,选择使用全链路追踪功能来追踪查询执行。obclient> alter proxyconfig set enable_full_link_trace = True;
步骤二:开启 Show Trace 功能并执行目标 SQL
使用用户租户登录 OceanBase 集群,并执行如下操作。
开启 Session 级别 Show Trace。
可通过设置 ob_enable_show_trace 为
ON,选择开启 Show Trace 功能。obclient> set ob_enable_show_trace= 'ON';执行目标 SQL,此处以执行
show tables;命令为例。obclient> show tables;输出如下:
+----------------------------+ | Tables_in_test | +----------------------------+ | t | | t1 | | t2 | +----------------------------+ 3 rows in set
步骤三:使用 Show Trace
您可执行 show trace; 命令获得 resultset 结果集回显,也可执行 show trace format='json'; 命令获得 resultset 结果集的 json 格式。
执行
show trace;命令获得 resultset 结果集回显。obclient> show trace;输出如下:
+-----------------------------------------------+----------------------------+------------+ | Operation | StartTime | ElapseTime | +-----------------------------------------------+----------------------------+------------+ | ob_proxy | 2026-01-08 15:17:24.555215 | 12.414 ms | | ├── ob_proxy_partition_location_lookup | 2026-01-08 15:17:24.555411 | 0.010 ms | | ├── ob_proxy_server_process_req | 2026-01-08 15:17:24.555813 | 10.150 ms | | └── com_query_process | 2026-01-08 15:17:24.555989 | 10.265 ms | | └── mpquery_single_stmt | 2026-01-08 15:17:24.556058 | 10.172 ms | | ├── sql_compile | 2026-01-08 15:17:24.556137 | 7.300 ms | | │ ├── pc_get_plan | 2026-01-08 15:17:24.556230 | 0.016 ms | | │ └── hard_parse | 2026-01-08 15:17:24.556370 | 7.014 ms | | │ ├── parse | 2026-01-08 15:17:24.556396 | 0.044 ms | | │ ├── resolve | 2026-01-08 15:17:24.556526 | 1.866 ms | | │ ├── rewrite | 2026-01-08 15:17:24.558557 | 2.020 ms | | │ ├── optimize | 2026-01-08 15:17:24.560613 | 1.928 ms | | │ └── code_generate | 2026-01-08 15:17:24.562580 | 0.428 ms | | └── sql_execute | 2026-01-08 15:17:24.563462 | 2.457 ms | | ├── open | 2026-01-08 15:17:24.563469 | 0.089 ms | | ├── response_result | 2026-01-08 15:17:24.563614 | 1.620 ms | | │ └── do_local_das_task | 2026-01-08 15:17:24.563716 | 1.025 ms | | └── close | 2026-01-08 15:17:24.565277 | 0.342 ms | | ├── close_das_task | 2026-01-08 15:17:24.565294 | 0.028 ms | | └── end_transaction | 2026-01-08 15:17:24.565551 | 0.036 ms | +-----------------------------------------------+----------------------------+------------+ 20 rows in set通过上述回显结果,可以先定界问题范围,从上述例子入手分析,通过分析下述几个点位的耗时,基本可以快速定界整体 DB 执行耗时的情况,为进一步分析和优化提供帮助。
ob_proxy 是 ODP 的起始点位,记录从 ODP 收到 SQL 请求到给客户端完整反馈响应的时间。
ob_proxy_server_process_req 点位表示发完 SQL 请求,到第一次收到 OBServer 节点返回响应的时间,等于 OBServer 节点处理时间 + 返回的网络耗时。
com_query_process 是 OceanBase 数据库的总点位,记录 OBServer 节点从收到 SQL 请求到转发响应完毕所需的时间。
执行
show trace format='json';命令获得 resultset 结果集的 json 格式。执行
show trace format = 'json';命令可以得到 json 的结果回显,并可以格式化,便于收集和观察分析,如下图所示。
您可反复执行 show trace; 命令或 show trace format='json'; 命令,实时回显观察。
步骤四:关闭 Show Trace 功能
分析结束后,执行如下命令关闭 Session 级别 Show Trace,避免性能影响。
obclient> set ob_enable_show_trace= 'OFF';