dbms_の使用profiler収集ストレージ・プロシージャのステップごとの実行時間
4117 ワード
最近、最適化チームの専門家が学んだ意味のある組み込みパッケージ:dbms_Profilerは、Oracleストレージ・プロセスの各セグメント・コードの時間オーバーヘッドを分析し、パフォーマンスのボトルネックを迅速に特定するためのステップです.1.sys dbms_の作成profiler 2.profilerユーザを作成し、テーブルとシーケンスに対応し、 を付与する.3.sysテーブルとシーケンスのpublic同義語 を作成4.dbms_を使用profiler収集実行時間情報 5.結果の照会と分析 1.sys dbms_の作成profiler
注意:ファイル%ORACLE_HOME%RDBMSADMINprofload.sql主要関数:start_profiler起動プログラム監視stop_profilerはプログラムの監視を終了します
2.profilerユーザーの作成、対応するテーブルとシーケンス、権限付与
備考:plsql_profiler_runs--prof運転情報plsql_profiler_units--prof各ユニット情報plsql_profiler_data--prof各ユニットの詳細plsql_profiler_runnumber--profの一意の実行番号を生成するシーケンス
3.sysテーブルとシーケンスのpublic同義語の作成
4.dbms_の使用profiler実行時間情報の収集
次のようなストレージ・プロシージャを分析するとします.
ストアド・プロシージャの実行時間情報を収集する方法は、次のとおりです.
5.結果の照会と分析
サンプル・クエリーの結果は次のとおりです.
説明:LINE#は、TEXTに対応する文のストアド・プロシージャの数行目、TOTAL_を表します.TIMEは実行の総時間(単位ns,10の負の9乗の秒)を表して、TOTAL_OCCURは実行回数を表し、MIN_TIMEは最短1回の運転時間を表し、MAX_TIMEは、最長1回の実行時間を表します.この例では、ストレージ・プロシージャSP_PROFILER_TEST 1の6行目のコード
conn /as sysdba
desc dbms_profiler -- dbms_profiler ,
@?/rdbms/admin/profload.sql
注意:ファイル%ORACLE_HOME%RDBMSADMINprofload.sql主要関数:start_profiler起動プログラム監視stop_profilerはプログラムの監視を終了します
2.profilerユーザーの作成、対応するテーブルとシーケンス、権限付与
conn / as sysdba;
CREATE USER profiler IDENTIFIED BY profiler;
grant connect,resource to profiler;
conn profiler/profiler;
@?/rdbms/admin/proftab.sql
GRANT SELECT ON plsql_profiler_runnumber TO PUBLIC;
GRANT SELECT,INSERT,UPDATE,DELETE ON plsql_profiler_data TO PUBLIC;
GRANT SELECT,INSERT,UPDATE,DELETE ON plsql_profiler_units TO PUBLIC;
GRANT SELECT,INSERT,UPDATE,DELETE ON plsql_profiler_runs TO PUBLIC;
備考:plsql_profiler_runs--prof運転情報plsql_profiler_units--prof各ユニット情報plsql_profiler_data--prof各ユニットの詳細plsql_profiler_runnumber--profの一意の実行番号を生成するシーケンス
3.sysテーブルとシーケンスのpublic同義語の作成
conn /as sysdba;
CREATE PUBLIC SYNONYM plsql_profiler_runnumber FOR profiler.plsql_profiler_runnumber;
CREATE PUBLIC SYNONYM plsql_profiler_runs FOR profiler.plsql_profiler_runs;
CREATE PUBLIC SYNONYM plsql_profiler_units FOR profiler.plsql_profiler_units;
CREATE PUBLIC SYNONYM plsql_profiler_data FOR profiler.plsql_profiler_data;
4.dbms_の使用profiler実行時間情報の収集
次のようなストレージ・プロシージャを分析するとします.
CREATE OR REPLACE procedure sp_profiler_test1
as
begin
for x in 1..10000
loop
insert into t_t1 values(x);
end loop;
commit;
end sp_profiler_test1;
/
ストアド・プロシージャの実行時間情報を収集する方法は、次のとおりです.
set serverout on;
DECLARE
v_run_number integer;
v_temp1 integer;
BEGIN
-- profiler
sys.DBMS_PROFILER.start_profiler (run_number => v_run_number);
-- ( )
DBMS_OUTPUT.put_line ('run_number:' || v_run_number);
-- PLSQL
sp_profiler_test1; --
-- profiler
sys.DBMS_PROFILER.stop_profiler;
END;
5.結果の照会と分析
set linesize 1000
col text format a60
SELECT d.line#, --
s.text, --
d.total_time, -- ( 10 , 10 -9 。)
d.total_occur, --
d.min_time, --
d.max_time --
FROM plsql_profiler_data d, sys.all_source s, plsql_profiler_units u
WHERE d.runid = 2 -- ( )
and u.unit_name = 'SP_PROFILER_TEST1' -- ,
AND u.runid = d.runid
AND d.unit_number = u.unit_number
AND d.total_occur <> 0
AND s.TYPE(+) = u.unit_type
AND s.owner(+) = u.unit_owner
AND s.name(+) = u.unit_name
AND d.line# = NVL (s.line, d.line#)
ORDER BY d.total_time desc, u.unit_number, d.line#;
サンプル・クエリーの結果は次のとおりです.
LINE# TEXT TOTAL_TIME TOTAL_OCCUR MIN_TIME MAX_TIME
---------- -------------------------------------- ---------- ----------- ---------- ----------
6 insert into t_t1 values(x); 150147563 10000 13108 3831882
4 for x in 1..10000 613220 10001 26 7514
8 commit; 75630 1 75630 75630
9 end sp_profiler_test1; 1683 1 1683 1683
Elapsed: 00:00:01.39
説明:LINE#は、TEXTに対応する文のストアド・プロシージャの数行目、TOTAL_を表します.TIMEは実行の総時間(単位ns,10の負の9乗の秒)を表して、TOTAL_OCCURは実行回数を表し、MIN_TIMEは最短1回の運転時間を表し、MAX_TIMEは、最長1回の実行時間を表します.この例では、ストレージ・プロシージャSP_PROFILER_TEST 1の6行目のコード
insert into t_t1 values(x);
の消費時間の割合が最も大きく,このステップは総消費150 msで10000回実行され,単回実行は最短13108 ns,最長3.83 msであった.