DBMS_PROFILERシステムパッケージは、PL中の各行の実行状況を記録し、その結果を集計して、PL実行プロセスにおける各ステートメントの実行時間を詳細に表示するために使用されます。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
DBMS_PROFILER権限の説明
このシステムパッケージの権限は AUTHID CURRENT_USER です。
サブルーチンの概要
以下の表に、OceanBaseデータベースの現行バージョンでサポートされている DBMS_PROFILER サブルーチンとその簡潔な説明を示します。
| サブルーチン | 説明 |
|---|---|
| start_profiler | パフォーマンスプロファイラーを起動します。起動後、現在のセッション上でPLが実行される状況を記録します。 |
| stop_profiler | パフォーマンスプロファイラーを停止します。停止後、結果はデータ統計テーブルに集約されます。 |
| pause_profiler | パフォーマンスプロファイラーを一時停止します。一時停止後、実行状況の記録が一時的に停止されます。 |
| resume_profiler | パフォーマンスプロファイラーを再開します。再開すると、実行状況の記録が再開されます。 |
| flush_data | データをデータ統計テーブルに集約します。 |
| get_version | 現在のDBMS_PROFILERバージョンを返します。 |
| internal_version_check | データベースバージョンとDBMS_PROFILERバージョンが一致しているかどうかを確認します。 |
| rollup_unit | 特定の実行における特定ユニットの実行時間を計算します。 |
| rollup_run | 特定の実行における各ユニットの実行時間を計算します。 |
| ob_init_objects | ユーザーschema下にデータ統計テーブルを作成します。 |
| ob_drop_objects | ユーザーschema下からデータ統計テーブルを削除します。 |
呼び出しプロセス
DBMS_PROFILER.start_profiler を呼び出してパフォーマンスプロファイラーを起動すると、そのセッション内で実行されるすべてのPLの各行の実行回数と実行時間が記録されます。特定のシナリオでシステムのウォームアップが必要な場合、ウォームアッププロセスが記録されないようにするために、DBMS_PROFILER.pause_profiler を使用してプロファイラーを一時停止できます。システムのウォームアップ完了後、DBMS_PROFILER.resume_profiler を使用して実行状況の記録を再開します。パフォーマンス分析が必要なPLの実行が終了したら、DBMS_PROFILER.stop_profiler を呼び出してパフォーマンスプロファイラーを閉じます。記録されたすべてのデータはデータ統計テーブルに集約され、データ統計テーブルを照会することでパフォーマンスを分析します。
以下の図のようになります:

使用例
ステートメントプロシージャPROC1を作成します。
obclient> CREATE OR REPLACE PROCEDURE PROC1 AS -> BEGIN -> NULL; -> END; -> / Query OK, 0 rows affected (0.057 sec)ステートメントプロシージャPROC0を作成します:
obclient> CREATE OR REPLACE PROCEDURE PROC0 AS -> BEGIN -> PROC1(); -> END; -> / Query OK, 0 rows affected (0.103 sec)パフォーマンス分析ツールを起動します:
obclient> CALL dbms_profiler.start_profiler(); Query OK, 0 rows affected (1.178 sec)ステートメントプロシージャPROC0を呼び出します:
obclient> CALL PROC0(); Query OK, 0 rows affected (0.470 sec)ステートメントプロシージャPROC0を実行します。パフォーマンス分析ツールが有効になっているため、今回の呼び出しデータは収集され、後続の分析に使用されます。
パフォーマンス分析ツールを無効にします:
call DBMS_PROFILER.stop_profiler(); Query OK, 0 rows affected (1.238 sec)パフォーマンス分析の実行情報を確認します:
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)分析対象ユニットの情報を確認します:
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ユニットの関連情報、ユニットタイプ、名前、および合計時間を照会します。特定行レベルのパフォーマンスデータを確認します:
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ユニット内の特定行の詳細なパフォーマンス統計を確認できます。これには、その行が実行された回数、合計実行時間、最小・最大実行時間などが含まれます。