---
title: "DBMS_PROFILER 概述 - OceanBase 数据库 V4.3.5 | OceanBase 文档中心"
description: DBMS_PROFILER 概述 DBMS_PROFILER 系统包用来记录 PL 中每一行的执行情况，并将结果汇总起来，详细展示 PL 执行过程中每一条语句的执行时间。 功能适用性 该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版仅提供 MySQL 模式。 DBMS_PROFILE…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

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

# DBMS_PROFILER 概述

更新时间：2026-07-15 20:42:46

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.5/zh-CN/700.reference/600.pl-reference/300.pl-oracle/1400.pl-system-package-oracle/19800.dbms-profiler-oracle/100.dbms-profiler-oracle-package-overview-oracle.md)  

`DBMS_PROFILER` 系统包用来记录 PL 中每一行的执行情况，并将结果汇总起来，详细展示 PL 执行过程中每一条语句的执行时间。

#### 功能适用性

该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版仅提供 MySQL 模式。

## DBMS_PROFILER 权限说明

该系统包权限为 `AUTHID CURRENT_USER`。

## 子程序概览

下表列出了 OceanBase 数据库当前版本所支持的 `DBMS_PROFILER` 子程序和简要描述。

| **子程序** | **描述** |
| --- | --- |
| [start_profiler](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016642) | 启动性能剖析器，启动后会记录当前 session 上 PL 的执行情况。 |
| [stop_profiler](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016639) | 关闭性能剖析器，关闭后将结果汇总到数据统计表。 |
| [pause_profiler](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016640) | 暂停性能剖析器，暂停后会暂时停止记录执行情况。 |
| [resume_profiler](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016646) | 恢复性能剖析器，恢复记录执行情况。 |
| [flush_data](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016649) | 将数据汇总到数据统计表。 |
| [get_version](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016644) | 返回当前 `DBMS_PROFILER` 版本。 |
| [internal_version_check](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016645) | 校验数据库版本与 `DBMS_PROFILER` 版本是否匹配。 |
| [rollup_unit](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016641) | 计算某次执行中某个单元的执行时间。 |
| [rollup_run](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016650) | 计算某次执行中每个单元的执行时间。 |
| [ob_init_objects](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016643) | 用户 `schema` 下创建数据统计表。 |
| [ob_drop_objects](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016647) | 用户 `schema` 下删除数据统计表。 |

## 调用流程

调用 `DBMS_PROFILER.start_profiler` 启动性能剖析器，在此之后该 session 中所有 PL 的执行中每一行的执行次数和耗时都会被记录。如果在某些场景下系统需要预热，为了防止预热过程被记录，可以通过 `DBMS_PROFILER.pause_profiler` 暂停剖析器，当系统预热完成后再通过 `DBMS_PROFILER.resume_profiler` 开始记录执行情况。待系统当需要分析性能的 PL 执行结束后，调用 `DBMS_PROFILER.stop_profiler` 关闭性能剖析器，所有记录的数据会汇总到数据统计表中，通过查询数据统计表来分析性能。

如下图所示：

![](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer/V4.2.3/2024.4.17.png)

## 使用示例

1. 创建存储过程 PROC1。

   ```shell
   obclient> CREATE OR REPLACE PROCEDURE PROC1 AS
       -> BEGIN
       -> NULL;
       -> END;
       -> /
   Query OK, 0 rows affected (0.057 sec)

   ```
 2. 创建存储过程 PROC0：

   ```shell
   obclient> CREATE OR REPLACE PROCEDURE PROC0 AS
       -> BEGIN
       -> PROC1();
       -> END;
       -> /
   Query OK, 0 rows affected (0.103 sec)

   ```
 3. 启动性能分析器:

   ```shell
   obclient> CALL dbms_profiler.start_profiler();
   Query OK, 0 rows affected (1.178 sec)

   ```
 4. 调用 PROC0 存储过程:

   ```shell
   obclient> CALL PROC0();
   Query OK, 0 rows affected (0.470 sec)

   ```

   执行 PROC0 存储过程。由于已经开启了性能分析器，所以这次调用的数据会被收集起来供后续分析使用。
 5. 关闭性能剖析器：

   ```shell
   call DBMS_PROFILER.stop_profiler();
   Query OK, 0 rows affected (1.238 sec)

   ```
 6. 查看性能分析运行信息:

   ```shell
   obclient> SELECT * FROM PLSQL_PROFILER_RUNS;
   +-------+-------------+-----------+-----------+-------------+----------------+-----------------+--------------+--------+
   | RUNID | RELATED_RUN | RUN_OWNER | RUN_DATE  | RUN_COMMENT | RUN_TOTAL_TIME | RUN_SYSTEM_INFO | RUN_COMMENT1 | SPARE1 |
   +-------+-------------+-----------+-----------+-------------+----------------+-----------------+--------------+--------+
   |     1 |        NULL | SYS       | 10-JAN-25 | 10-JAN-25   |    34000000000 | NULL            | NULL         | NULL   |
   +-------+-------------+-----------+-----------+-------------+----------------+-----------------+--------------+--------+
   1 row in set (0.002 sec)

   ```
 7. 查看被分析单元的信息:

   ```shell
   obclient> SELECT * FROM PLSQL_PROFILER_UNITS;
   +-------+-------------+-----------+------------+-----------+----------------+------------+--------+--------+
   | RUNID | UNIT_NUMBER | UNIT_TYPE | UNIT_OWNER | UNIT_NAME | UNIT_TIMESTAMP | TOTAL_TIME | SPARE1 | SPARE2 |
   +-------+-------------+-----------+------------+-----------+----------------+------------+--------+--------+
   |     1 |      500025 | PROCEDURE | SYS        | PROCL     | 10-JAN-25      |          0 |   NULL |   NULL |
   |     1 |      500026 | PROCEDURE | SYS        | PROC0     | 10-JAN-25      |          0 |   NULL |   NULL |
   +-------+-------------+-----------+------------+-----------+----------------+------------+--------+--------+
   2 rows in set (0.004 sec)

   ```

   从 `PLSQL_PROFILER_UNITS` 表中查询到每个被分析的 PL/SQL 单元的相关信息，如单元类型、名称及总计时间。
 8. 查看具体行级别的性能数据:

   ```shell
   obclient> SELECT * FROM PLSQL_PROFILER_DATA;
   +-------+-------------+-------+-------------+------------+----------+----------+--------+--------+--------+--------+
   | RUNID | UNIT_NUMBER | LINE# | TOTAL_OCCUR | TOTAL_TIME | MIN_TIME | MAX_TIME | SPARE1 | SPARE2 | SPARE3 | SPARE4 |
   +-------+-------------+-------+-------------+------------+----------+----------+--------+--------+--------+--------+
   |     1 |      500025 |     1 |           1 |        537 |      537 |      537 |   NULL |   NULL |   NULL |   NULL |
   |     1 |      500025 |     3 |           1 |       7118 |     7118 |     7118 |   NULL |   NULL |   NULL |   NULL |
   |     1 |      500026 |     1 |           1 |        406 |      406 |      406 |   NULL |   NULL |   NULL |   NULL |
   |     1 |      500026 |     3 |           1 |   16031017 | 16031017 | 16031017 |   NULL |   NULL |   NULL |   NULL |
   +-------+-------------+-------+-------------+------------+----------+----------+--------+--------+--------+--------+
   4 rows in set (0.002 sec)

   ```

   通过查询 `PLSQL_PROFILER_DATA` 表可以查看每个 PL/SQL 单元内部特定行的详细性能统计，包括该行被执行次数、总的执行时间和最小最大执行时间等。

 上一篇 下一篇 ![有帮助](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) 咨询热线
