PLSQL_性能優化效能跟蹤工具DBMS_PROFILER分析(案例)


2014-06-01 Created By BaoXinjian

一、摘要


Oracle PLSQL性能診斷是經常會遇到問題,所以Oracle提供了比較多的程式診斷工具,其中包括了dbms_profiler包

DBMS_PROFILER中會用到一些基本構建如下

  • 在調用程式前DBMS_PROFILER.START_PROFILER,啟動對該程式監控
  • 在調用程式后DBMS_PROFILER.STOP_PROFILER,結束對程式監控
  • 在監控過程中,系統會將資料存放至三個表中PLSQL_PROFILER_RUNS -> UNITS -> DATA
  • 通過profiler.sql工具產生HTML形式的性能報表

個人感覺,如果本人自己測試程式性能的話,只需查看監控數據在PLSQL_PROFILER_RUNS / UNITS/ DATA即可

但是如果遇到客戶對程式性能有懷疑時,需要通過profiler.sql產生HTML性能報表就非常重要了,總不能讓客戶查看SQL,而Oracle自帶的標准HTML匯總報表舊非常有說服力了

 

二、案例


需求:客戶要求診斷一個客制化的package的性能,使用dbms_profiler跟蹤,發現問題所在並進行調優

1. 建立測試腳本,測試dbms_profiler

2. 查詢SQL Performance的三個重要表PLSQL_PROFILER_RUNS->UNITS->DATA,通過Run_Id

3. 查詢SQL Performance通過profiler.sql導出html格式的性能報表,調用時輸入唯一參數Run_Id

 

三、案例實現


Step1. 建立測試腳本,測試dbms_profiler

 1     DECLARE
 2 
 3         x_to_currecny GL_DAILY_RATES.TO_CURRENCY%TYPE;  4 
 5         x_from_currency GL_DAILY_RATES.FROM_CURRENCY%TYPE;  6 
 7         x_conversion_date GL_DAILY_RATES.CONVERSION_DATE%TYPE;  8 
 9         x_rate NUMBER; 10 
11     BEGIN
12 
13         DBMS_PROFILER.START_PROFILER('BXJ_PLSQL_DBMS_PROFILER'); 14 
15         SELECT to_currency, from_currency, conversion_date 16 
17            INTO x_to_currecny, x_from_currency, x_conversion_date 18 
19          FROM gl_daily_rates 20 
21        WHERE ROWNUM <= 1; 22 
23         x_rate := bxj_get_rate.get_rate_1(x_to_currecny, 24 
25  x_from_currency, 26 
27  x_conversion_date); 28 
29         DBMS_OUTPUT.PUT_LINE('x_rate=' || x_rate); 30 
31  DBMS_PROFILER.STOP_PROFILER; 32 
33     END;

 

Step2.1 查詢SQL Performance的三個重要表PLSQL_PROFILER_RUNS->UNITS->DATA

 1     select * from PLSQL_PROFILER_RUNS  2 
 3         where run_comment= 'BXJ_PLSQL_DBMS_PROFILER'
 4 
 5  
 6 
 7     select * from PLSQL_PROFILER_UNITS  8 
 9         where runid = 15
10 
11  
12 
13     select * from PLSQL_PROFILER_DATA 14 
15         where runid = 15
16 
17         order by line#

 

Step2.2. 具體SQL

 1     SELECT d.line#, s.text,d.total_time, d.total_occur, d.min_time,d.max_time  2 
 3      FROM plsql_profiler_data d, sys.all_source s, plsql_profiler_units u  4 
 5     WHERE d.runid = 15
 6 
 7         AND u.unit_name = 'BXJ_GET_RATE'
 8 
 9         AND u.runid = d.runid 10 
11         AND d.unit_number = u.unit_number 12 
13         AND d.total_occur <> 0
14 
15         AND s.TYPE(+) = u.unit_type 16 
17         AND s.owner(+) = u.unit_owner 18 
19         AND s.name(+) = u.unit_name 20 
21         AND d.line# = NVL (s.line, d.line#) 22 
23     ORDER BY u.unit_number, d.line#;

    

 

Step3. 查詢SQL Performance通過profiler.sql導出html格式的性能報表

    (1).本地調用Profiler.SQL

              

    (2).產生profiler file

       

    (3).查看HTML報表

        

 

Thanks and Regards

注:Profiler.sql下載路徑: Matelink - Script to produce HTML report with top consumers out of PL/SQL Profiler DBMS_PROFILER data (Doc ID 243755.1)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM