79 DBMS_HPROF

DBMS_HPROFパッケージは、PL/SQLアプリケーションの実行をプロファイルするためのインタフェースを提供します。階層的なプロファイラ・データの収集、未処理のプロファイラ出力の分析および情報生成のプロファイリングのためのサービスが提供されます。

この章では、次の項目について説明します。

参照:

PL/SQL階層プロファイラの詳細は、『Oracle Database開発ガイド』を参照してください。

79.1 DBMS_HPROFサブプログラムの要約

この表では、DBMS_HPROFパッケージのサブプログラムをリストし、簡単に説明します。

表79-1 DBMS_HPROFパッケージのサブプログラム

サブプログラム 説明

ANALYZEファンクション

未処理のプロファイラ出力を分析し、データベース表の階層プロファイラ情報を生成します。

START_PROFILINGプロシージャ

ユーザーのセッションで階層プロファイラ・データ収集を開始します。

STOP_PROFILINGプロシージャ

ユーザーのセッションでプロファイラ・データ収集を停止します。

79.1.1 ANALYZEファンクション

このファンクションは、未処理のプロファイラ出力を分析し、データベース表の階層プロファイラ情報を生成します。

構文

DBMS_HPROF.ANALYZE (
   location         VARCHAR2,
   filename         VARCHAR2,
   summary_mode     BOOLEAN     DEFAULT FALSE,
   trace            VARCHAR2    DEFAULT NULL,
   skip             PLS_INTEGER DEFAULT 0,
   collect          PLS_INTEGER DEFAULT NULL,
   run_comment      VARCHAR2    DEFAULT NULL)
  RETURN NUMBER;

パラメータ

表79-2 ANALYZEファンクションのパラメータ

パラメータ 説明

location

ディレクトリ・オブジェクトの名前。このディレクトリ・オブジェクトにマップされたファイル・システム・ディレクトリから未処理のプロファイラ・データファイルが読み取られます。出力ファイルもこのディレクトリに書き込まれます。

filename

分析する未処理のプロファイラ・データファイルの名前。このファイルは、locationパラメータで指定されたディレクトリに存在する必要があります。

summary_mode

デフォルトでは(つまり、summary_modeFALSEの場合)、詳細な分析が実行されます。summary_modeTRUEの場合は、最上位レベルのサマリー情報のみがデータベース表に生成されます。

trace

指定したトレース・エントリをルートとするサブツリーのみが分析されます。デフォルト(traceがNULLの場合)では、すべての実行に対して分析およびレポート生成が行われます。

トレース・エントリは、引用符で囲まれた特別な修飾形式(スキーマ名、モジュール名およびファンクション名を含む)で指定する必要があり、たとえば、'"SCOTT"."PKG"."FOO"'または'"".""."__plsql_vm"'というように指定します。指定した名前で複数のオーバーロードがある場合は、該当するすべてが分析されます。

skip

traceを指定した場合にのみ使用します。指定したトレースをルートとするサブツリーのみが分析されますが、最初のskip回分、traceへのコールが無視されます。skipのデフォルト値は0 (ゼロ)です。

collect

traceを指定した場合にのみ使用します。

collect回数のtraceのコールを分析します(skip+1番目のコールから開始)。デフォルトでは、1回のコールのみが収集されます。

run_comment

この実行に関してユーザーが指定したコメント。

戻り値

今回のアナライザ実行に対する一意の実行識別子。この識別子を使用すると、この実行に対応する結果を階層プロファイラ表から検索できます。

使用上のノート

  • rdbms/adminディレクトリにあるdbmshptab.sqlスクリプトを使用して、未処理のプロファイラ・データの分析結果を継続的に格納するための階層プロファイラ・データベース表や他のデータ構造を作成します。

  • dbmshptab.sqlを実行すると、以前に作成された階層プロファイラ表はすべて削除されます。

次のコマンドでは、階層プロファイラ表がHRスキーマにインストールされます。

connect HR/<password>;
@?/rdbms/admin/dbmshptab.sql

79.1.2 START_PROFILINGプロシージャ

このプロシージャは、ユーザーのセッションで階層プロファイラ・データ収集を開始します。

構文

DBMS_HPROF.START_PROFILING (
   location    VARCHAR2 DEFAULT NULL,
   filename    VARCHAR2 DEFAULT NULL,
   max_depth   PLS_INTEGER DEFAULT NULL);

パラメータ

表79-3 START_PROFILINGプロシージャのパラメータ

パラメータ 説明

location

ディレクトリ・オブジェクトの名前。このディレクトリ・オブジェクトにマップされたファイル・システム・ディレクトリに、未処理のプロファイラ出力が生成されます。

filename

未処理のプロファイラ・データの出力ファイル名。ファイルは、locationパラメータで指定されたディレクトリに作成されます。

max_depth

デフォルト(つまり、max_depth値がNULLの場合)では、コールの深さに関係なく、すべてのファンクションのプロファイル情報が収集されます。max_depthNULL以外の値を指定した場合は、コールの深さが最大でmax_depthのレベルまでのファンクションのデータのみが、プロファイラによって収集されます。

使用上のノート

プロファイラは、max_depthの値よりも深いファンクションを個別に追跡しませんが、これらのファンクションで消費された時間は、max_depthの深さの祖先ファンクションに含まれます。

79.1.3 STOP_PROFILINGプロシージャ

このプロシージャは、ユーザーのセッションでプロファイラ・データ収集を停止します。また、このサブプログラムには、それまでにセッションで収集したデータをフラッシュする副次効果があり、これが実行の終了を示します。

構文

DBMS_HPROF.STOP_PROFILING;

未処理のプロファイラ・データ表でのプロファイル

DECLARE
    analyze_runid number;
    trace_id number;
BEGIN
    -- create raw profiler data and analysis tables
    -- call create_tables with force_it =>FALSE (default) when
    -- raw profiler data and analysis tables do not exist already
    DBMS_HPROF.CREATE_TABLES;
    -- Start profiling
    -- Write raw profiler data in raw profiler data table
    trace_id := DBMS_HPROF.START_PROFILING;
    -- Run the procedure to be profiled
    test;
    -- Stop profiling
    DBMS_HPROF.STOP_PROFILING;
    -- analyzes trace_id entry in raw profiler data table and writes
    -- hierarchical profiler information in hprof’s analysis tables
    analyze_runid := DBMS_HPROF.ANALYZE(trace_id);
END;
/