DBMS_PROFILER


ストアドの行ごとのコストを調べることができる。
実行するには以下の手順で。


DBMS_PROFILERをインストールする。


sqlplusを起動し、sysユーザで接続する

conn sys/ora_pass@orcl as sysdba


profload.sqlを実行し、パッケージをコンパイルする

@?/rdbms/admin/profload.sql

※@?はORACLE_HOMEを示す



DBMS_PROFILERで使用するテーブルの作成する。


sqlplusを起動し、DBMS_PROFILERで集計したいユーザで接続する。


proftab.sqlを実行しテーブルを作成する

@?/rdbms/admin/proftab.sql

■データを収集する。

--プロファイラの開始
exec dbms_profiler.start_profiler('hogehoge');

-- PLSQLの実行
DECLARE
  PA_MESSAGE VARCHAR2(200);
  v_Return NUMBER;
BEGIN

  v_Return := hogehoge(
    PA_MESSAGE => PA_MESSAGE
  );
  DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return);
END;
/

--プロファイラの終了
exec dbms_profiler.stop_profiler;


start_profilerの引数は何でもよい。集計テーブルのCOMMENT列に設定される値となる。



■収集したデータを閲覧する。


収集したデータは以下のテーブルに格納される。


PLSQL_PROFILER_RUNS
PLSQL_PROFILER_UNITS
PLSQL_PROFILER_DATA


どの行にどのくらいコストがかかったかはPLSQL_PROFILER_DATAをSelect すれば分かる。

select	RUNID,
	UNIT_NUMBER,
	LINE#,		--行番号
	TOTAL_OCCUR,	--その行が実行された回数
	TOTAL_TIME,	--その行の実行時間(合計)	単位:ナノ秒
	MIN_TIME,		--その行の実行時間(最小)
	MAX_TIME		--その行の実行時間(最大)
from	PLSQL_PROFILER_DATA
order by LINE#


動作確認環境: oracle10g