在Java的效能調優分析中,可以使用 JProfiler 分析JVM運行時的CPU消耗、Memory佔用、Thread情況等資訊。對於Java代碼中調用的Oracle的預存程序、函數它也能輸出調用時間、調用次數等資訊,但對於過程、函數內部的效能情況,JProfiler就使不上力了。
在一次調優實戰中,我就遇到了上面的情況,預存程序是效能問題所在,需要調優,這時就要用上 Oracle 提供的 DBMS_PROFILER package了。
1. DBMS_PROFILER 是什嗎?能做什嗎?
它是 Oracle 提供的一個用於效能分析的工具包。從Oracle document 網站找的定義大致是說:
此package能收集PLSQL執行時的效能資料,開發人員可以使用這些資料用於程式分析以提高其運行速度。開發人員可以在一個Session中開啟此工具,它會記錄所有的“資料庫物件(function、procedure這樣的PLSQL代碼)”的效能分析資料,“資料”包括每句代碼的運行次數、已耗用時間、運行平均時間、最長已耗用時間、最短已耗用時間等資訊。
2. 使用DBMS_PROFILER對PLSQL進行效能分析
用它進行效能分析的過程大概是這樣的:安裝DBMS_PROFILER package --》 初始化記錄表 --》開啟分析開關 --》 執行你的PLSQL --》去分析表裡面找瓶頸所在 --》解決它。
以下詳解:
2.1 啟用DBMS_PROFILER
先查看是否已安裝:
SQL> desc dbms_profiler
如沒有安裝,執行
SQL> @@C:\oracle\product\10.2.0\client_1\RDBMS\ADMIN\profload.sql
重設記錄表,執行
SQL> @@C:\oracle\product\10.2.0\client_1\RDBMS\ADMIN\proftab.sql
2.2 執行你的PLSQL
begin
DBMS_PROFILER.START_PROFILER ('My Test‘);
--PLSQL 放在這裡
DBMS_PROFILER.STOP_PROFILER;
end;
此段程式會先開啟profiler 的設定,然後執行待測試的代碼,最後再關閉profiler。這是一個典型的應用,DBMS_PROFILER也支援“暫停”,‘恢複“的操作:
DBMS_PROFILER.PAUSE_PROFILER ,DBMS_PROFILER.RESUME_PROFILER
然後就跑下這段代碼,接下來就可以看分析資料了。
2.3查看分析資料
效能資料會被記錄在下面的三張表裡:
select * from PLSQL_PROFILER_RUNS ;
select * from PLSQL_PROFILER_UNITS ;
select * from PLSQL_PROFILER_DATA;
Oracle 10g 安裝後重啟系統,用PLSQL串連報沒有監聽
ORA-03114 PLSQL過程編譯中斷連線錯誤
PLSQL 串連 Oracle簡單配置
PLSQL批量Forall操作效能提升詳解
使用Oracle SQLDeveloper串連資料庫並建立使用者
Oracle內建的PL/SQL Developer匯入匯出資料
在64位Win7系統下安裝Oracle 11g和Oracle SQL Developer用戶端