使用dbms_profiler測試儲存過程效能
1.以sys使用者登入執行以下指令碼
SQL> conn / as sysdba
已連線。
SQL> @E:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\profload.sql
程式包已建立。
授權成功。
同義詞已建立。
庫已建立。
程式包體已建立。
Testing for correct installation
SYS.DBMS_PROFILER successfully loaded.
PL/SQL 過程已成功完成。
2.test使用者建立一儲存過程
SQL> create table tab_test (a int);
表已建立。
SQL> CREATE OR REPLACE PROCEDURE sp_test
2 AS
3 BEGIN
4 FOR I IN 1 .. 100
5 LOOP
6 INSERT INTO tab_test
7 VALUES (I);
8 END LOOP;
9 COMMIT;
10 END;
11 /
在test使用者執行以下指令碼
SQL> @E:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\proftab.sql
drop table plsql_profiler_data cascade constraints
*
第 1 行出現錯誤:
ORA-00942: 表或檢視不存在
drop table plsql_profiler_units cascade constraints
*
第 1 行出現錯誤:
ORA-00942: 表或檢視不存在
drop table plsql_profiler_runs cascade constraints
*
第 1 行出現錯誤:
ORA-00942: 表或檢視不存在
drop sequence plsql_profiler_runnumber
*
第 1 行出現錯誤:
ORA-02289: 序列不存在
表已建立。
註釋已建立。
表已建立。
註釋已建立。
表已建立。
註釋已建立。
序列已建立。
過程已建立。
DECLARE
v_run_number integer;
v_temp1 integer;
BEGIN
--啟動profiler
DBMS_PROFILER.start_profiler (run_number => v_run_number);
--顯示當前跟蹤的執行序號(後面查詢要用)
DBMS_OUTPUT.put_line ('run_number:' || v_run_number);
--執行要跟蹤的PLSQL
sp_test;
--停止profiler
DBMS_PROFILER.stop_profiler;
END;
3.查詢結果
SQL> select runid,run_owner,run_date,run_total_time from plsql_profiler_runs;
RUNID RUN_OWNER RUN_DATE RUN_TOTAL_TIME
---------- -------------------------------- -------------- --------------
1 TEST 10-1月 -15 1.0894E+11
2 TEST 10-1月 -15 2.3250E+10
3 TEST 10-1月 -15 4.1350E+10
4 TEST 10-1月 -15 5.9329E+10
SQL> col text format a60
SQL> SELECT d.line#, --程式碼行號
2 s.text, --原始碼
3 d.total_time, --總共執行時間(單位10000億分之一秒)
4 d.total_occur, --總共執行次數
5 d.min_time, --最小執行時間
6 d.max_time --最大執行時間
7 FROM plsql_profiler_data d, sys.all_source s, plsql_profiler_units u
8 WHERE d.runid = 1 --執行號
9 and u.unit_name = 'SP_TEST' --單元名,即被測試的儲存過程名
10 AND u.runid = d.runid
11 AND d.unit_number = u.unit_number
12 AND d.total_occur <> 0
13 AND s.TYPE(+) = u.unit_type
14 AND s.owner(+) = u.unit_owner
15 AND s.name(+) = u.unit_name
16 AND d.line# = NVL (s.line, d.line#)
17 ORDER BY u.unit_number, d.line#;
LINE# TEXT TOTAL_TIME TOTAL_OCCUR MIN_TIME MAX_TIME
---------- ------------------------------------------------------------ ---------- ----------- ---------- ----------
4 FOR I IN 1 .. 100 26505044 101 241371 613485
6 INSERT INTO tab_test 1.4423E+10 100 13279900 9301057816
9 COMMIT; 53914114 1 53914114 53914114
10 END; 886146 1 886146 886146
SQL> select unit_number,unit_type,unit_owner,unit_name,unit_timestamp,total_time from plsql_profiler_units where runid = 1 and unit_name = 'SP_TEST';
UNIT_NUMBER UNIT_TYPE UNIT_OWNER UNIT_NAME UNIT_TIMESTAMP TOTAL_TIME
----------- -------------------------------- -------------------------------- -------------------------------- -------------- ----------
2 PROCEDURE TEST SP_TEST 10-1月 -15 0
SQL> select runid,unit_number,line#,total_occur,total_time,min_time,max_time from plsql_profiler_data where runid = 1 and unit_number = 2;
RUNID UNIT_NUMBER LINE# TOTAL_OCCUR TOTAL_TIME MIN_TIME MAX_TIME
---------- ----------- ---------- ----------- ---------- ---------- ----------
1 2 1 0 1025828 1025828 1025828
1 2 4 101 26505044 241371 613485
1 2 6 100 1.4423E+10 13279900 9301057816
1 2 9 1 53914114 53914114 53914114
1 2 10 1 886146 886146 886146
4.生成html報表
SQL> column RUNID format 99
SQL> column RUN_COMMENT format a30
SQL> @C:\prof\profiler.sql
RUNID RUN_DATE RUN_COMMENT
----- ----------------------- ---------------------------
1 10-1月 -15 15:04:25 10-1月 -15
2 10-1月 -15 15:04:51 10-1月 -15
3 10-1月 -15 16:14:59 10-1月 -15
4 10-1月 -15 16:15:21 10-1月 -15
Usage:
sqlplus apps/
SQL> START profiler.sql
輸入 1 的值: 4
SQL> conn / as sysdba
已連線。
SQL> @E:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\profload.sql
程式包已建立。
授權成功。
同義詞已建立。
庫已建立。
程式包體已建立。
Testing for correct installation
SYS.DBMS_PROFILER successfully loaded.
PL/SQL 過程已成功完成。
2.test使用者建立一儲存過程
SQL> create table tab_test (a int);
表已建立。
SQL> CREATE OR REPLACE PROCEDURE sp_test
2 AS
3 BEGIN
4 FOR I IN 1 .. 100
5 LOOP
6 INSERT INTO tab_test
7 VALUES (I);
8 END LOOP;
9 COMMIT;
10 END;
11 /
在test使用者執行以下指令碼
SQL> @E:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\proftab.sql
drop table plsql_profiler_data cascade constraints
*
第 1 行出現錯誤:
ORA-00942: 表或檢視不存在
drop table plsql_profiler_units cascade constraints
*
第 1 行出現錯誤:
ORA-00942: 表或檢視不存在
drop table plsql_profiler_runs cascade constraints
*
第 1 行出現錯誤:
ORA-00942: 表或檢視不存在
drop sequence plsql_profiler_runnumber
*
第 1 行出現錯誤:
ORA-02289: 序列不存在
表已建立。
註釋已建立。
表已建立。
註釋已建立。
表已建立。
註釋已建立。
序列已建立。
過程已建立。
DECLARE
v_run_number integer;
v_temp1 integer;
BEGIN
--啟動profiler
DBMS_PROFILER.start_profiler (run_number => v_run_number);
--顯示當前跟蹤的執行序號(後面查詢要用)
DBMS_OUTPUT.put_line ('run_number:' || v_run_number);
--執行要跟蹤的PLSQL
sp_test;
--停止profiler
DBMS_PROFILER.stop_profiler;
END;
3.查詢結果
SQL> select runid,run_owner,run_date,run_total_time from plsql_profiler_runs;
RUNID RUN_OWNER RUN_DATE RUN_TOTAL_TIME
---------- -------------------------------- -------------- --------------
1 TEST 10-1月 -15 1.0894E+11
2 TEST 10-1月 -15 2.3250E+10
3 TEST 10-1月 -15 4.1350E+10
4 TEST 10-1月 -15 5.9329E+10
SQL> col text format a60
SQL> SELECT d.line#, --程式碼行號
2 s.text, --原始碼
3 d.total_time, --總共執行時間(單位10000億分之一秒)
4 d.total_occur, --總共執行次數
5 d.min_time, --最小執行時間
6 d.max_time --最大執行時間
7 FROM plsql_profiler_data d, sys.all_source s, plsql_profiler_units u
8 WHERE d.runid = 1 --執行號
9 and u.unit_name = 'SP_TEST' --單元名,即被測試的儲存過程名
10 AND u.runid = d.runid
11 AND d.unit_number = u.unit_number
12 AND d.total_occur <> 0
13 AND s.TYPE(+) = u.unit_type
14 AND s.owner(+) = u.unit_owner
15 AND s.name(+) = u.unit_name
16 AND d.line# = NVL (s.line, d.line#)
17 ORDER BY u.unit_number, d.line#;
LINE# TEXT TOTAL_TIME TOTAL_OCCUR MIN_TIME MAX_TIME
---------- ------------------------------------------------------------ ---------- ----------- ---------- ----------
4 FOR I IN 1 .. 100 26505044 101 241371 613485
6 INSERT INTO tab_test 1.4423E+10 100 13279900 9301057816
9 COMMIT; 53914114 1 53914114 53914114
10 END; 886146 1 886146 886146
SQL> select unit_number,unit_type,unit_owner,unit_name,unit_timestamp,total_time from plsql_profiler_units where runid = 1 and unit_name = 'SP_TEST';
UNIT_NUMBER UNIT_TYPE UNIT_OWNER UNIT_NAME UNIT_TIMESTAMP TOTAL_TIME
----------- -------------------------------- -------------------------------- -------------------------------- -------------- ----------
2 PROCEDURE TEST SP_TEST 10-1月 -15 0
SQL> select runid,unit_number,line#,total_occur,total_time,min_time,max_time from plsql_profiler_data where runid = 1 and unit_number = 2;
RUNID UNIT_NUMBER LINE# TOTAL_OCCUR TOTAL_TIME MIN_TIME MAX_TIME
---------- ----------- ---------- ----------- ---------- ---------- ----------
1 2 1 0 1025828 1025828 1025828
1 2 4 101 26505044 241371 613485
1 2 6 100 1.4423E+10 13279900 9301057816
1 2 9 1 53914114 53914114 53914114
1 2 10 1 886146 886146 886146
4.生成html報表
SQL> column RUNID format 99
SQL> column RUN_COMMENT format a30
SQL> @C:\prof\profiler.sql
RUNID RUN_DATE RUN_COMMENT
----- ----------------------- ---------------------------
1 10-1月 -15 15:04:25 10-1月 -15
2 10-1月 -15 15:04:51 10-1月 -15
3 10-1月 -15 16:14:59 10-1月 -15
4 10-1月 -15 16:15:21 10-1月 -15
Usage:
sqlplus apps/
SQL> START profiler.sql
輸入 1 的值: 4
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26937943/viewspace-1397250/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [原創]儲存過程效能測試儲存過程
- 用dbms_profiler調優儲存過程儲存過程
- 全面的儲存過程 測試可用儲存過程
- DBMS_PROFILER 檢視儲存過程執行時間儲存過程
- ORACLE儲存過程中建立子過程的測試!Oracle儲存過程
- 我的測試儲存過程程式碼儲存過程
- 使用儲存過程儲存過程
- 儲存過程在主從庫上的測試儲存過程
- oracle 匿名儲存過程插入大量測試資料Oracle儲存過程
- mysql儲存過程小試牛刀MySql儲存過程
- Postmark測試後端儲存效能後端
- Mysql 儲存過程的使用MySql儲存過程
- 儲存過程中使用cursor儲存過程
- 優化儲存過程的2種方法(DBMS_PROFILER和10046事件)優化儲存過程事件
- 軟體效能測試有哪些測試過程?
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- 簡單測試在儲存過程中臨時表與union all的效能差別儲存過程
- 儲存過程儲存過程
- 達夢儲存過程效能問題定位儲存過程
- Laravel 中使用 MySQL 儲存過程LaravelMySql儲存過程
- mysql 遊標的使用(儲存過程)MySql儲存過程
- oracle 儲存過程遊標的使用Oracle儲存過程
- 在sqlplus互動環境下測試儲存過程SQL儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- 學習DBMS_PROFILER包診斷儲存過程及函式的情能及引申思考儲存過程函式
- 自定義效能統計儲存過程包runstats儲存過程
- 23. 使用MySQL之使用儲存過程MySql儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- Oracle儲存過程Oracle儲存過程
- sybase儲存過程儲存過程
- java儲存過程Java儲存過程
- 管理儲存過程儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- SQLSERVER儲存過程SQLServer儲存過程
- 在Entity Framework中使用儲存過程Framework儲存過程