基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
全链路诊断追踪
更新时间:2026-09-04 12:01:13
简介
OceanBase 数据库的全链路诊断机制通过建立事务与 SQL 追踪的标准数据模型,扩展了 SQL Trace 的功能,可以提升定位 OBServer 全链路问题的效率,并实现了分布式和并行执行时的追踪分析能力。
运维人员可根据需要使用 PL 程序包 DBMS_MONITOR 中的相关方法或者客户端接口来控制应用程序中不同标识信息维度的全链路诊断 Trace 的开启与关闭,以及该 Trace 的打点和相关信息打印到 Trace 日志的策略。需要注意的是,日志打印会根据采样频率判断是否会被采样并记录到内存中,即是否打印到 Trace 日志中具有一定的概率性。
PL 程序包 DBMS_APPLICATION_INFO(设置模块名称、处理过程名称和其他客户端相关信息) 和 DBMS_SESSION (设置 Session Identifier)可以用于在应用程序 APP 中设置标识应用信息。Session Identifier、模块名称、处理过程名称和其他客户端相关信息设置完成后,OBServer 内部会同步设置到当前 Session 的结构信息中,相关信息用户可以通过 V$SESSION 视图查询。
前提条件
建议使用以下版本的 OBProxy 以及 OBServer 来获取完整的全链路诊断追踪能力:
OBProxy:V4.0.0 及其以上版本
OBServer:V4.0.0 及其以上版本
打开和关闭 Trace
OceanBase 数据库通过 PL 程序包 DBMS_MONITOR 或者客户端接口控制不同级别的 Trace 收集,以应对所运行的生产环境中不同场景下的诊断需求。
其中 Server 端主要使用 DBMS_MONITOR 包进行控制,DBMS_MONITOR 程序包所涉及到的相关变量如下。
session_id:Session ID,可以通过 SHOW PROCESSLIST 命令(仅 MySQL 模式支持)、GV$OB_PROCESSLIST 等视图查询。client_id:Session 的标志符,可以通过 GV$OB_PROCESSLIST 视图的 ID 字段查询。module_name:Session 的 Module 标记名称,可以通过 GV$OB_PROCESSLIST 视图的 module 字段查询。action_name:Session 的 Action 标记名称,可以通过 GV$OB_PROCESSLIST 视图的 action 字段查询。tenant_name:租户名称,可选项为空值(表示当前租户)和各租户名称。level:打印日志的粒度。目前支持三个粒度等级,其中 Level1 为模块级别的粗粒度,Level3 的粒度最精细。sample_pct:控制采样频率,取值范围为 [0,1]。record_policy: 日志打印策略,即 Trace 信息输出到日志文件中策略。当前支持以下三种策略:ALL:所有 Span 和 Tag 信息均打印到日志文件中,并且是在每个 Span 结束时就打印到日志文件中。ONLY_SLOW_QUERY:当前请求为 Slow Query,该部分信息的 Span 和 Tag 会打印到日志文件中。SAMPLE_AND_SLOW_QUERY:当前请求为 Slow Query,该部分信息的 Span 和 Tag 会打印到日志文件中,其他请求信息的 Span 和 Tag 有一定的概率会打印到日志文件中。
开启/关闭 Session 级别的 Trace
DBMS_MONITOR 包的 OB_SESSION_TRACE_ENABLE 过程根据 Session ID 开启指定 Session 的 Trace。语法如下:
DBMS_MONITOR.OB_SESSION_TRACE_ENABLE(
session_id IN BINARY_INTEGER DEFAULT NULL,
level IN INT,
sample_pct IN NUMBER,
record_policy IN VARCHAR2);
其中,如果 session_id 为 NULL,表示当前 Session。
DBMS_MONITOR 包的 OB_SESSION_TRACE_DISABLE 过程根据 Session ID 关闭指定 Session 的 Trace。语法如下:
DBMS_MONITOR.OB_SESSION_TRACE_DISABLE(session_id IN BINARY_INTEGER);
其中,如果 session_id 为 NULL,表示当前 Session。
示例
开启 session 级别全链路诊断追踪能力,其中采样频率设为 50%,只记录 Slow Query,之后关闭 session 级别全链路诊断追踪能力。
相关 DBMS 包如下:
DBMS_MONITOR.OB_SESSION_TRACE_ENABLE(
session_id IN BINARY_INTEGER DEFAULT NULL,
level IN INT,
sample_pct IN NUMBER,
record_policy IN VARCHAR2);
DBMS_MONITOR.OB_SESSION_TRACE_DISABLE(session_id IN BINARY_INTEGER);
OBClient 使用:
# 开启 session 级别全链路诊断追踪能力,将采样频率设为 50%,只记录 Slow Query
obclient [SYS]> CALL DBMS_MONITOR.OB_SESSION_TRACE_ENABLE(null,1,0.5,'ONLY_SLOW_QUERY');
Query OK, 0 rows affected
# 关闭 session 级别全链路诊断追踪能力
obclient [SYS]> CALL DBMS_MONITOR.OB_SESSION_TRACE_DISABLE(null);
Query OK, 0 rows affected
开启/关闭 Client Identifier 级别的 Trace
在开启 Client Identifier 级别的 Trace 前需要先使用 DBMS_SESSION 包设置 client_id 标识信息。语法如下:
DBMS_SESSION.SET_IDENTIFIER(client_id VARCHAR2);
DBMS_MONITOR 包的 OB_CLIENT_ID_TRACE_ENABLE 过程可以根据所设置的 client_id 打开指定 Trace。语法如下:
DBMS_MONITOR.OB_CLIENT_ID_TRACE_ENABLE(
client_id IN VARCHAR2,
level IN INT,
sample_pct IN NUMBER,
record_policy IN VARCHAR2);
DBMS_MONITOR 包的 OB_CLIENT_ID_TRACE_DISABLE过程可以根据 client_id 关闭指定 Trace。语法如下:
DBMS_MONITOR.OB_CLIENT_ID_TRACE_DISABLE(client_id IN VARCHAR2);
示例
开启 Client Identifier 级别的 Trace,记录 client_id 为 jdbc 的相关耗时等信息,采样频率设为 50%,并且只记录 Slow Query,之后关闭 Client Identifier 级别的 Trace。
相关 DBMS 包如下:
首先需要设置 identifier
使用设置的 identifier 开启或关闭 Trace
DBMS_SESSION.SET_IDENTIFIER(client_id VARCHAR2);
DBMS_MONITOR.OB_CLIENT_ID_TRACE_ENABLE(
client_id IN VARCHAR2,
level IN INT,
sample_pct IN NUMBER,
record_policy IN VARCHAR2);
DBMS_MONITOR.OB_CLIENT_ID_TRACE_DISABLE(client_id IN VARCHAR2);
OBClient 使用:
# 设置 identifier
obclient [SYS]> CALL DBMS_SESSION.SET_IDENTIFIER('obclient');
Query OK, 0 rows affected
# 使用设置的 identifier 开启 Trace,记录 client_id 为 obclient 的相关耗时等信息,采样频率设为 50%,并且只记录 Slow Query
obclient [SYS]> CALL DBMS_MONITOR.OB_CLIENT_ID_TRACE_ENABLE('obclient',1,0.5,'ONLY_SLOW_QUERY');
Query OK, 0 rows affected
# 使用设置的 identifier 关闭 Trace
obclient [SYS]> CALL DBMS_MONITOR.OB_CLIENT_ID_TRACE_DISABLE('obclient');
Query OK, 0 rows affected
开启/关闭 Module/Action 级别的 Trace
在开启 Module 或 Action 级别的 Trace 前需要先使用 DBMS_APPLICATION_INFO 包的子程序设置模块名称、处理过程名称和其他客户端相关信息。相关子程序如下:
SET_MODULE 过程用于设置 APP 中模块的名称
DBMS_APPLICATION_INFO.SET_MODULE (module_name IN VARCHAR2, action_name IN VARCHAR2);SET_ACTION 过程用于设置 APP 模块中某个处理过程的名称。
DBMS_APPLICATION_INFO.SET_ACTION (action_name IN VARCHAR2);SET_CLIENT_INFO 过程用于设置其他客户端相关信息。
DBMS_APPLICATION_INFO.SET_CLIENT_INFO (client_info IN VARCHAR2);
DBMS_MONITOR 包的 OB_MOD_ACT_TRACE_ENABLE 过程可以根据所设置的 module_name 和 action_name 开启指定 Module 或者 Action 的 Trace。语法如下:
DBMS_MONITOR.OB_MOD_ACT_TRACE_ENABLE(
module_name IN VARCHAR2 DEFAULT ANY_MODULE,
action_name IN VARCHAR2 DEFAULT ANY_ACTION,
level IN INT,
sample_pct IN NUMBER,
record_policy IN VARCHAR2);
DBMS_MONITOR 包的 OB_MOD_ACT_TRACE_DISABLE 过程可以根据所设置的 module_name 和 action_name 关闭指定 Module 或者 Action 的 Trace。语法如下:
DBMS_MONITOR.OB_MOD_ACT_TRACE_DISABLE(
module_name IN VARCHAR2,
action_name IN VARCHAR2 DEFAULT ALL_ACTIONS);
示例
记录 module_name 为 backup,action_name 为 insert 的相关耗时等信息,采样频率为 50%,并且只记录 Slow Query。之后关闭 module_name 为 backup,action_name 为 insert 的 Trace。
相关 DBMS 包如下:
在开启 Module 或 Action 级别的 Trace 前需要先使用 DBMS_APPLICATION_INFO 包的子程序设置模块名称
然后通过设置的 Module 或者 Action,来开启或者关闭 trace
DBMS_APPLICATION_INFO.SET_MODULE (module_name IN VARCHAR2, action_name IN VARCHAR2);
DBMS_APPLICATION_INFO.SET_ACTION (action_name IN VARCHAR2);
DBMS_MONITOR.OB_MOD_ACT_TRACE_ENABLE(
module_name IN VARCHAR2 DEFAULT ANY_MODULE,
action_name IN VARCHAR2 DEFAULT ANY_ACTION,
level IN INT,
sample_pct IN NUMBER,
record_policy IN VARCHAR2);
obclient 使用:
# 设置模块名称
obclient [SYS]> CALL DBMS_APPLICATION_INFO.SET_MODULE('backup','insert');
Query OK, 0 rows affected
# 开启 Trace,采样频率为 50%,并且只记录 Slow Query
obclient [SYS]> CALL DBMS_MONITOR.OB_MOD_ACT_TRACE_ENABLE('backup','insert',1,0.5,'ONLY_SLOW_QUERY');
Query OK, 0 rows affected
# 关闭 Trace
obclient [SYS]> CALL DBMS_MONITOR.OB_MOD_ACT_TRACE_DISABLE('backup','insert');
Query OK, 0 rows affected
开启/关闭租户级别的 Trace
DBMS_MONITOR 包的 OB_TENANT_TRACE_ENABLE 过程可以开启当前租户的 Trace。语法如下:
DBMS_MONITOR.OB_TENANT_TRACE_ENABLE(
level IN INT,
sample_pct IN NUMBER,
record_policy IN VARCHAR2);
示例
记录当前租户中的耗时等信息,全部记录并全部打印。
相关 DBMS 包如下:
DBMS_MONITOR.OB_TENANT_TRACE_ENABLE(
level IN INT,
sample_pct IN NUMBER,
record_policy IN VARCHAR2);
obclient 使用:
# 开启 Trace,记录当前租户中的耗时等信息,全部记录并全部打印
obclient [SYS]> CALL DBMS_MONITOR.OB_TENANT_TRACE_ENABLE(1, 1, 'ALL');
Query OK, 0 rows affected
# 关闭 Trace
obclient [SYS]> CALL DBMS_MONITOR.OB_TENANT_TRACE_DISABLE();
Query OK, 0 rows affected