Oracle PL/SQL Profiler應用指南
2024-08-29 13:28:55
供稿:網友
 
oracle pl/sql profiler應用指南
 
profiler是oracle pl/sql 的一個調試優化跟蹤方案的應用
    相對sqltrace+tkprof工具調試優化跟蹤方案來說, profiler有最直觀更方便的優點,因為不需要生成和讀取服務器端的跟蹤文件,它是將跟蹤數據全部存儲的數據庫表里,所以也得到了一些第三方工具的支持,如pl/sql developer 。
    注:profiler生成的跟蹤信息遠遠沒有trace生成的詳細,它沒有執行計劃、沒有cpu及io 信息,它只是生成主要的執行時間信息,所以分析起來比較快,比較直觀,可以讓我們以最快的時間定位要優化的sql。
 
下面將介紹oracle pl/sql profiler的詳細應用
 
1、安裝
安裝總共要運行兩個oralce自帶的服務腳本 
(1)、創建profiler的基礎結構
    @$oracle_home/rdbms/admin/proftab.sql;
            proftab.sql會在當前用戶下創建如下表結構及序列:
                plsql_profiler_runs  - profiler運行信息
                plsql_profiler_units - profiler每個單元信息
                plsql_profiler_data  - profiler每個單元的詳細數據
                plsql_profiler_runnumber 用來生成profiler唯一運行編號的序列
                    
(2)、創建數據庫服務運行包
    @$oracle_home/rdbms/admin/profload.sql;
            profload.sql主要是創建sys.dbms_profiler包
            包主要的函數過程有
            
                start_profiler, 
                stop_profiler, 
                pause_profiler, 
                resume_profiler, 
                flush_data, 
                internal_version_check, 
                get_version, 
                rollup_unit, 
                rollup_run
            
            主要使用的函數是
                start_profiler--啟動 profiler
                stop_profiler--停止 profiler
                其它為一些輔助函數
2、應用實例         
declare
  v_run_number integer;
  v_temp1 integer;
begin
  --1.啟動profiler
  sys.dbms_profiler.start_profiler(run_number => v_run_number);
  --顯示當前跟蹤的運行序號(后面查詢要用)
  dbms_output.put_line('run_number:'||v_run_number);
  --2.運行要跟蹤的pl/sql
  --select count(*) into v_temp1 from scott.emp t;
  --select count(*) into v_temp1 from scott.dept t;
  --3.停止profiler
  sys.dbms_profiler.stop_profiler;
end;
 
3、查詢結果
select u.unit_name,--單元名稱
       d.line,--代碼行號
       d.total_time,--總共運行時間(單位:10000億分之一秒)
       d.total_occur,--總共運行次數
       d.min_time,--最小運行時間
       d.max_time,--最大運行時間
       s.text--源代碼
  from plsql_profiler_data d, sys.all_source s, plsql_profiler_units u
 where d.runid = 33--運行號v_run_number
   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#
 
    以上介紹的是通過手工方法應用profiler,使用相對比較煩雜,最后查詢也不直觀,下面將詳細介紹在pl/sql developer 應用profiler
 
1、 打開test window
    方法一、新建一個test window
    方法二、選擇要跟蹤運行的過程,快捷菜單test,如下圖所示
 
在test window中輸入你要執行的pl/sql腳本
 
2、打開profiler,如下圖所示
    如果在打開profiler出現出錯提示則說明你沒有安裝profiler,詳細安裝步驟見上文的安裝過程。
3、f8執行腳本,執行完成后,切換到profiler選項卡,如下圖所示
每列的詳細意義如下:
       unit --單元名稱
       line--代碼行號
       total time--總共運行時間(本行代碼的執行時間與最長代碼執行時間的百分比圖)
       occurrences--總共運行次數
       text--源代碼
       average time—平均運行時間
       maximum time--最大運行時間
       minimum time--最小運行時間
 
    列表中顯示的源代碼只顯不一行,如果要定位則可以在對應的行中打開右鍵,選擇
[go to unit line] ,這樣就會直接跳到對應的源代碼位置。
 
工具欄
1、  顯示配置對話框
2、  刷新
3、  刪除當前運行號的數據
4、run:顯示當前的系統的所有profiler列表,缺省為當前的跟蹤
5、unit:顯示本次跟蹤的單元列表信息(執行時間),缺省為所有單元的執行時間
 
配置pl/sql developer 的profiler選項,如下圖所示
    available columns:可用列
    selected columns:選擇要查看的列
    time units:時間單位(秒、毫秒、微秒)
    show 0 occurrences:是否顯示執行0次的處理語句
    graphical time display:用圖形顯示處理時間的顏色深度百分比
 
 
葉正盛
2005-04-17