使用profiler測試Oracle PL/SQL效能
Oracle儲存過程和PL/SQL程式碼常常包含了多個子過程和SQL,對於單個的SQL,我們很容易分析他的執行效率,但是對於PL/SQL儲存過程,我們如何分析它的執行效率、具體每一步的耗時情況呢?Oracle提供了profiler工具可以比較好的解決這個問題。
一、使用前的準備工作
1、檢查DBMS_PROFILER包是否安裝
desc dbms_profiler;
如果沒有安裝,在SYS使用者下執行Oracle主目錄裡的指令碼進行安裝
@?/rdbms/admin/profload.sql
2、第一次使用需要建立用於存放統計資料的表
以哪個使用者執行PL/SQL,就以哪個使用者登陸來建立表。執行以下指令碼,會建立三個表plsql_profiler_data、plsql_profiler_runs、plsql_profiler_units
@?/rdbms/admin/proftab.sql
二、執行測試程式碼
對需要分析的儲存過程和PL/SQL程式碼執行以下包裹測試,填入執行儲存過程需要的引數
declare
err number;
emp_no varchar2(20) := '91001';
line_id number := 100;
station_id number := 1040;
res varchar2(100);
begin
err := dbms_profiler.start_profiler(to_char(sysdate,
'yyyy-mm-dd hh24:mi:ss')); -- 任意的註釋引數
-- 需要執行的儲存過程和PL/SQL程式碼
M090_NS_CHK_EMP(emp_no, line_id, station_id, res);
err := dbms_profiler.stop_profiler;
end;
/
三、查詢結果
找到最近一次執行的run_id
col run_comment for a50
select * from (select runid, to_char(run_date, 'yyyy-mm-dd hh24:mi:ss') run_date, run_comment from plsql_profiler_runs order by runid desc) where rownum = 1;
RUNID RUN_DATE RUN_COMMENT
---------- ------------------- --------------------------------------------------
3 2019-09-02 12:54:08 2019-09-02 12:54:08
根據run_id查詢分析結果
select p.unit_name,
p.occured,
p.total_time,
p.line# line,
substr(s.text, 1, 100) text
from (select u.unit_name,
d.total_occur occured,
d.total_time,
d.line#
from plsql_profiler_units u, plsql_profiler_data d
where d.runid = u.runid
and d.unit_number = u.unit_number
and d.total_occur > 0
and u.runid = &run_id) p,
user_source s
where p.unit_name = s.name(+)
and p.line# = s.line(+)
order by p.unit_name, p.line#;
由此可以看到儲存過程及其各個子過程中每一步的消耗時間以及執行次數。
四、生成報告
為了以更好的形式展示分析結果,可以執行以下指令碼生成查詢分析報告
@C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\profiler.sql
RUNID RUN_DATE RUN_COMMENT
---------- ----------------------- --------------------------------------------------------------------------------
1 02-9月 -19 10:01:31 Test Script - 2019/9/2 10:01:31
2 02-9月 -19 10:15:45 Test Script - 2019/9/2 10:15:44
3 02-9月 -19 12:54:08 2019-09-02 12:54:08
已用時間: 00: 00: 00.03
Usage:
sqlplus apps/<pwd>
SQL> START profiler.sql <runid>
輸入 1 的值: 3
生成的報告類似如下形式
附:相關指令碼
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28974745/viewspace-2655711/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle PL/SQLOracleSQL
- Oracle 的PL/SQL語言使用OracleSQL
- Oracle PL/SQL塊簡介OracleSQL
- 「Oracle」客戶端 PL/SQL DEVELOPER 安裝使用Oracle客戶端SQLDeveloper
- openGauss關於PL/SQL匿名塊呼叫測試SQL
- Prepared SQL 效能測試SQL
- 5. Oracle連線和使用——5.2. PL/SQL DeveloperOracleSQLDeveloper
- Python的SQL效能測試PythonSQL
- Python 的 SQL 效能測試PythonSQL
- Oracle RAC序列效能測試Oracle
- Oracle PL/SQL程式碼中的註釋OracleSQL
- 使用python對oracle進行簡單效能測試PythonOracle
- oracle學習筆記(十五) PL/SQL語法結構以及使用Oracle筆記SQL
- PL/SQL Developer連線到Oracle 12cSQLDeveloperOracle
- 【OracleEBS】 在PL/SQL中呼叫Oracle ERP請求OracleSQL
- 【TEST】Oracle19c使用benchmarksql進行效能測試OracleSQL
- Oracle vs PostgreSQL Develop(23) - PL(pg)sql(引數宣告)OracleSQLdev
- 原創:oracle PL/SQL程式設計基礎 上OracleSQL程式設計
- 原創:oracle PL/SQL程式設計基礎 下OracleSQL程式設計
- PL/SQL Developer連線遠端Oracle資料庫SQLDeveloperOracle資料庫
- PL/SQL 宣告SQL
- Android Studio 3.0 利用 Android Profiler 測量應用效能Android
- 【PG效能測試】pgbench效能測試工具簡單使用
- 【TUNE_ORACLE】列出LOOP套LOOP的PL/SQL程式碼SQL參考OracleOOPSQL
- oracle學習筆記(十七) PL/SQL高階應用Oracle筆記SQL
- pl/sql to_dateSQL
- PL/SQL 運算子SQL
- PL/SQL 條件SQL
- PL/SQL 迴圈SQL
- PL/SQL 遊標SQL
- Oracle 19c Concepts(08):Server-Side Programming: PL/SQL and JavaOracleServerIDESQLJava
- 本地不安裝oracle,用PL/SQL Developer連線資料庫OracleSQLDeveloper資料庫
- 使用 fio 工具測試 EBS 效能
- Jmeter效能測試簡單使用JMeter
- 使用Loadrunner進行效能測試
- [20210812]測試sql語句子游標的效能.txtSQL
- Oracle 效能調優工具:SQL MonitorOracleSQL
- iOS使用Instrument Time Profiler工具分析和優化效能問題iOS優化