oracle使用profiler分析語句執行效率
1、前言
Profiler是ORACLE PL/SQL 的一個除錯最佳化跟蹤方案,使用profiler可以跟語句執行過程中消耗的時間等。在日常開發過程中,我們可能會常常遇到一些sql語句、儲存過程在使用過程中,消耗過多的資源,為了細化了某條具體的語句,我們可以使用profiler。這樣大大的減少了我們尋找問題語句的時間,提高效率,在最佳化的過程中,profiler起到一個很好的效果
2、profiler的一些包的介紹
--proftab.sql介紹
在當前使用者建表及序列等,具體如下;
plsql_profiler_runs - profiler執行資訊
plsql_profiler_units - profiler每個單元資訊
plsql_profiler_data - profiler每個單元的詳細資料
plsql_profiler_runnumber 用來生成profiler唯一執行編號的序列
--profload.sql介紹
建立資料庫服務包,包括啟動、停止等,具體如下:
sys.dbms_profiler包
此包包括以下主要的函式過程
start_profiler --啟動函式
stop_profiler --停止函式
pause_profiler
resume_profiler
flush_data
internal_version_check
get_version
rollup_unit
rollup_run
--具體建立過程
SQL> @$ORACLE_HOME/rdbms/admin/proftab.sql;
drop table plsql_profiler_data cascade constraints
ERROR at line 1:
ORA-00942: table or view does not exist
drop table plsql_profiler_units cascade constraints
*
ERROR at line 1:
ORA-00942: table or view does not exist
drop table plsql_profiler_runs cascade constraints
*
ERROR at line 1:
ORA-00942: table or view does not exist
drop sequence plsql_profiler_runnumber
*
ERROR at line 1:
ORA-02289: sequence does not exist
Table created.
Comment created.
Table created.
Comment created.
Table created.
Comment created.
Sequence created.
在建立的過程中,會檢測這些物件是否存在,先進行刪除,後面補建成功
SQL> @$ORACLE_HOME/rdbms/admin/profload.sql;
Package created.
Grant succeeded.
Synonym created.
Library created.
Package body created.
Testing for correct installation
SYS.DBMS_PROFILER successfully loaded.
PL/SQL procedure successfully completed.
3、建立我們需要的測試物件
在本儲存過程中,我們只進行兩條語句的分析處理,具體如下:
SQL> CREATE OR REPLACE PROCEDURE mytest_proc
2 is
3 v_counts1 number;
4 v_counts2 number;
5 v_counts3 number;
6
7 begin
8 select count(*) into v_counts1 from dba_tables;
9 select count(*) into v_counts2 from dba_objects;
10 select count(*) into v_counts3 from dba_segments;
11 end;
12 /
4、開始測試profiler的使用
--針對上面建立的儲存過程,對裡面的語句進行分析
SQL> begin
2 DBMS_PROFILER.START_PROFILER('my profiler test');
3 mytest_proc ;
4 DBMS_PROFILER.STOP_PROFILER;
5 end;
6 /
PL/SQL procedure successfully completed.
--查詢剛才分析出來的結果:
SQL> select d.line#,
2 u.unit_name,
3 d.total_time,
4 d.total_occur,
5 d.max_time,
6 s.text
7 from sys.plsql_profiler_data d, sys.all_source s, sys.plsql_profiler_units u
8 where u.runid = d.runid
9 and d.unit_number = u.unit_number
10 and d.total_occur <> 0
11 and s.type(+) = u.unit_type
12 and s.owner(+) = u.unit_owner
13 and s.name(+) = u.unit_name
14 and d.line# = nvl(s.line, d.line#) and u.unit_name = 'MYTEST_PROC'
15 order by u.unit_number, d.line#
16 ;
LINE# UNIT_NAME TOTAL_TIME TOTAL_OCCUR MAX_TIME TEXT
----- --------------- ---------- ----------- ---------- ----------------------------------------------------
1 MYTEST_PROC 2006 1 2006 PROCEDURE mytest_proc
8 MYTEST_PROC 412905914 1 412905914 select count(*) into v_counts1 from dba_tables;
9 MYTEST_PROC 102775576 1 102775576 select count(*) into v_counts2 from dba_objects;
10 MYTEST_PROC 222756652 1 222756652 select count(*) into v_counts3 from dba_segments;
12 MYTEST_PROC 5015 1 5015 end;
欄位說明:
unit_time --表示執行的過程、語句、函式等
total_time --總共執行的時間,單位非常小,萬億分之一秒
total_occur --執行的次數,用總時間除次數,可得到每次執行的時間
max_time --程式碼執行的最最長時間,如有遊標迴圈等
runid --執行號,這個是自動產生的
Avg_time --平均執行時間
min_time --最小執行時間
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29371470/viewspace-1064297/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫查詢優化:使用explain分析sql語句執行效率資料庫優化AISQL
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- Oracle執行語句跟蹤 使用sql trace實現語句追蹤OracleSQL
- 【SQL】Oracle sql語句 minus函式執行效率與join對比SQLOracle函式
- 後臺執行SQL語句(oracle)SQLOracle
- MySQL語句執行分析(一)MySql
- MySQL語句執行分析(二)MySql
- MYSQL 中 exists 語句執行效率變低MySql
- java連線oracle執行sql語句JavaOracleSQL
- sql語句執行緩慢分析SQL
- Oracle資料庫SQL語句執行過程Oracle資料庫SQL
- [20181119]sql語句執行緩慢分析.txtSQL
- PostgreSQL的insert語句執行過程分析SQL
- [求指導] 如何通過程式碼分析一個查詢語句的執行效率
- oracle常用後臺程序及sql語句執行流程OracleSQL
- mySQL 執行語句執行順序MySql
- oracle v$sqlare 分析SQL語句使用資源情況OracleSQL
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- 在oracle中跟蹤會話執行語句的幾種方法Oracle會話
- SQL語句執行順序SQL
- sql語句如何執行的SQL
- Select語句執行順序
- 使用profiler測試Oracle PL/SQL效能OracleSQL
- MySQL中UPDATE語句裡SET後使用AND的執行過程和結果分析MySql
- Mybatis原始碼分析(五)探究SQL語句的執行過程MyBatis原始碼SQL
- ORACLE常用語句:Oracle
- mysql的sql語句執行流程MySql
- SQL 語句的執行順序SQL
- mysql 語句的執行順序MySql
- takes_ownership(s)語句執行
- mysql執行sql語句過程MySql
- python怎樣執行js語句PythonJS
- Mybatis 動態執行SQL語句MyBatisSQL
- 【SQL】Oracle 表新增列提高效率語句參考SQLOracle
- Oracle提高SQL執行效率的三種方法ITOracleSQL
- Laravel 獲取執行的sql語句LaravelSQL
- 一條更新語句的執行流程
- MySQL cron定時執行SQL語句MySql
- Oracle基本SQL語句OracleSQL