---
title: "全链路追踪方法 - OceanBase 数据库 V4.2.1 | OceanBase 文档中心"
description: 全链路追踪方法 运维人员可根据需求使用 PL/SQL 程序包 DBMS_MONITOR 中相关方法，控制应用程序在不同标识信息维度下是否开启全链路追踪 trace，以及该 trace 的打点和相关信息是否打印到 trace 日志的策略。日志打印会根据采样频率决定是否采样并记录到内存中，有一定的概率会被打印到 trac…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.2.1 LTS

# 全链路追踪方法

更新时间：2026-04-16 00:11:36

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.1/zh-CN/600.manage/900.daily-inspection/900.full-link-detection/300.full-link-diagnosis.md)  

运维人员可根据需求使用 PL/SQL 程序包 DBMS_MONITOR 中相关方法，控制应用程序在不同标识信息维度下是否开启全链路追踪 trace，以及该 trace 的打点和相关信息是否打印到 trace 日志的策略。日志打印会根据采样频率决定是否采样并记录到内存中，有一定的概率会被打印到 trace 日志中。

## Trace 开启和关闭操作

您可以通过调用 DBMS_MONITOR 包下的 trace 相关方法实现 trace 不同级别的开关模式。

在这里介绍下方法中涉及到的相关变量定义：

- `session_id`：会话 ID，可以通过 show processlist（MySQL 模式），GV$OB_PROCESSLIST 等视图查询。
 - `client_id`：客户端 ID，可以通过 GV$OB_PROCESSLIST 的 client 字段查询。
 - `module_name`：模块名，可以通过 GV$OB_PROCESSLIST 的 module 字段查询。
 - `action_name`：活动名，可以通过 GV$OB_PROCESSLIST 的 action 字段查询。
 - `tenant_name`：租户名，可选项为：空值（非 null，表示当前租户）和各租户名。
 - `level`：打印日志的粒度。目前支持三个粒度等级，其中 Level1 为模块级别的粗粒度，Level3 的粒度最精细。
 - `sample_pct`：控制采样频率，取值范围为 [0,1]。
 - `record_policy`: 日志打印策略，即 trace 信息输出到日志文件中策略，支持以下 3 种策略。

     - ALL，所有 span 和 tag 信息均打印到日志文件中，并且在每个 span 结束时都打印到日志文件中。
     - ONLY_SLOW_QUERY，当前请求为 slow query ，则该部分信息的 span 和 tag 会打印到日志文件中。
     - SAMPLE_AND_SLOW_QUERY，当前请求为 slow query 则该部分信息的 span 和 tag 会打印到日志文件中；其他请求信息的 span 和 tag 有一定的概率会打印到日志文件中。

更多的内容请参见相关 [DBMS_MONITOR](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000502063) 包的定义。

### Session 级别

#### 打开 Trace

```sql
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 相关耗时等信息，采样频率为 50%，并且只记录 slow query。

```sql
call dbms_monitor.ob_session_trace_enable(null, 1, 0.5, 'ONLY_SLOW_QUERY');

```

#### 关闭 Trace

```sql
DBMS_MONITOR.OB_SESSION_TRACE_DISABLE(session_id   IN  BINARY_INTEGER);

```

示例：关闭当前 session trace。

```sql
call dbms_monitor.ob_session_trace_disable(null);

```

### client_identifier 级别

#### 打开 Trace

```sql
DBMS_MONITOR.OB_CLIENT_ID_TRACE_ENABLE(
  client_id    IN  VARCHAR2,
  level        IN  INT,
  sample_pct   IN  NUMBER,
  record_policy IN VARCHAR2
);

```

下面的示例中，记录了 client_id 为 jdbc 的相关耗时信息，采样频率为 50%，并且只记录 slow query。

```sql
call dbms_monitor.ob_client_id_trace_enable('jdbc', 1, 0.5, 'ONLY_SLOW_QUERY');

```

#### 关闭 Trace

```sql
DBMS_MONITOR.OB_CLIENT_ID_TRACE_DISABLE(client_id IN  VARCHAR2);

```

下面的示例中，关闭了 client_id 为 jdbc 的 trace。

```sql
call dbms_monitor.ob_client_id_trace_disable('jdbc');

```

### Module/Action级别

#### 打开 Trace

```sql
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
);

```

下面的示例中，记录 module_name 为 backup，action_name 为 insert 的相关耗时信息，采样频率为 50%，并且只记录 slow query。其中的 module_name 和 action_name 通过 dbms_application_info 包的 SET_MODULE 方法设置。

```sql
call dbms_application_info.set_module('backup', 'insert');
call dbms_monitor.ob_mod_act_trace_enable('backup', 'insert', 1, 0.5, 'ONLY_SLOW_QUERY');

```

#### 关闭 Trace

```sql
DBMS_MONITOR.OB_MOD_ACT_TRACE_DISABLE(
  module_name     IN  VARCHAR2,
  action_name     IN  VARCHAR2 DEFAULT ALL_ACTIONS
);

```

下面的示例中，关闭 module_name 为 backup，action_name 为 insert 的 trace。

```sql
call dbms_monitor.ob_mod_act_trace_disable('backup', 'insert');

```

### 租户级别

#### 打开 Trace

```sql
DBMS_MONITOR.OB_TENANT_TRACE_ENABLE(
  level        IN  INT,
  sample_pct   IN  NUMBER,
  record_policy IN VARCHAR2
);

```

下面的示例中，记录当前租户中的耗时信息，全部记录并全部打印。

```sql
call dbms_monitor.ob_tenant_trace_enable(1, 1, 'ALL');

```

#### 关闭 Trace

```sql
DBMS_MONITOR.OB_TENANT_TRACE_DISABLE(tenant_name  IN VARCHAR2 DEFAULT NULL);

```

下面的示例中，关闭租户名为 ORACLE 的 trace。

```sql
call dbms_monitor.ob_tenant_trace_disable('ORACLE');

```

下面的示例中，关闭当前租户的 trace。

```sql
call dbms_monitor.ob_tenant_trace_disable();

```

相关日志信息输出到 trace.log，具体内容示例如下：

```sql
[20xx-0x-xx 00:07:46.027232] [1751][T1_TNT_L0][T1][YB42AC12050D-0005E42565DA44B2-0-0] {"trace_id":"0005e495-f920-5adc-7cd1-3730afa11dbd","name":"sql_execute","id":"0005e426-2c2b-0755-0000-000000000005","

start_ts":1658707664460666,"end_ts":1658707666027098,"parent_id":"0005e426-3355-05b6-0000-000000000002","is_follow":false}
[20xx-0x-xx 00:07:46.027234] [1751][T1_TNT_L0][T1][YB42AC12050D-0005E42565DA44B2-0-0] {"trace_id":"0005e495-f920-5adc-7cd1-3730afa11dbd","name":"pc_get_plan","id":"0005e426-5aac-d38c-0000-000000000004","start_ts":1658707664460552,"end_ts":1658707664460660,"parent_id":"0005e426-a22f-6cd4-0000-000000000003","is_follow":false}

```

了解更多全链路追踪的内容，请参见 [查询链路](https://www.oceanbase.com/docs/enterprise-oceanbase-ocp-cn-10000000000775814)。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
