利用dbms_profile定位儲存過程或者package裡低效率語句
http://blog.chinaunix.net/uid-74941-id-85352.html
1.檢查是否安裝了dbms_profiler包
如果沒有安裝的話,執行下面的語句安裝,
@?/rdbms/admin/profload.sql
2.把dbms_profiler的執行許可權賦於測試使用者scott
grant execute on dbms_profiler to scott;
3.使用測試使用者scott登入,執行proftab.sql(建立跟蹤相關係統表)
@?/rdbms/admin/proftab.sql
4.建立一個測試的過程,
DMMS_PROFILER的用發:
(1).DBMS_PROFILER.start_profiler啟動監控
(2).執行所需要分析的儲存過程,可以是多個
(3).DBMS_PROFILER.stop_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;
/
--執行DMMS_PROFILER
set serverout on;
DECLARE
v_run_number 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.檢視結果
--使用測試使用者進行查詢
select d.line#, --原始碼行號
s.text, --原始碼
round(d.total_time/1000000000000,5) total_time , --總執行時間(單位秒)
d.total_occur, --總共執行次數
round(d.min_time/1000000000000,5) min_time, --單次最小執行時間
round(d.max_time/1000000000000,5) 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 u.unit_number, d.line#;
1秒=1000毫秒bai(ms)
1秒=1,000,000 微秒(μdus)
1秒=1,000,000,000 納秒(ns)
1秒 =1,000,000,000,000 皮秒(ps) (單位10000億分之一秒)
1秒=1,000,000,000,000,000飛秒(fs)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2701923/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL儲存過程語句及呼叫MySql儲存過程
- oracle 儲存過程以及plsql語句塊Oracle儲存過程SQL
- Oracle 儲存過程中的DDL語句Oracle儲存過程
- PostgreSQL獲取建表語句儲存過程SQL儲存過程
- EF中使用SQL語句或儲存過程SQL儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- 用儲存過程把表裡的資料導成insert語句儲存過程
- 儲存過程 與 SQL Server語句大比拼儲存過程SQLServer
- 在.NET中用儲存過程執行SQL語句儲存過程SQL
- Oracle儲存過程乾貨(二):PLSQL控制語句Oracle儲存過程SQL
- 通過SQL語句提取儲存過程中的內容SQL儲存過程
- 儲存過程語法儲存過程
- 儲存過程if,for,while語句,陣列和遊標使用儲存過程While陣列
- Oracle儲存過程乾貨(三):PLSQL迴圈語句Oracle儲存過程SQL
- 儲存過程不好在哪裡?儲存過程
- oracle plsql package_body_procedure_構建語法_sp_儲存過程OracleSQLPackage儲存過程
- 儲存過程基本語法儲存過程
- 達夢儲存過程效能問題定位儲存過程
- Oracle中定義package以及儲存過程的使用OraclePackage儲存過程
- Mysql儲存過程 變數,條件,迴圈語句用法MySql儲存過程變數
- asp.net分頁的SQL語句及儲存過程ASP.NETSQL儲存過程
- mySQL語法中的儲存過程及if語句的使用簡例MySql儲存過程
- Oracle儲存過程基本語法Oracle儲存過程
- sql server儲存過程語法SQLServer儲存過程
- 深入解讀MySQL InnoDB儲存引擎Update語句執行過程MySql儲存引擎
- 金倉資料庫KingbaseES儲存過程 RETURN語句資料庫儲存過程
- Entity Framework Code First執行SQL語句、檢視及儲存過程FrameworkSQL儲存過程
- DDL語句在儲存過程中使用的細節和要點儲存過程
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- 儲存過程儲存過程
- 通過儲存過程執行通過DBLINK的查詢語句失敗-單個語句成功--ORA-00604儲存過程
- MySql儲存過程的作用及語法MySql儲存過程
- MySQL儲存過程詳解 mysql 儲存過程linkMySql儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- asp.net利用儲存過程分頁程式碼ASP.NET儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- Oracle儲存過程Oracle儲存過程
- 使用儲存過程儲存過程