使用sql monitor獲取更加詳細的執行計劃 - dbms_sqltune.report_sql_monitor

不一樣的天空w發表於2019-01-15

在資料庫上執行SQL語句,執行完畢或執行過程中可以透過如下語句查詢到

     SQL_ID 。

select *  from  v$sql  

where  sql_text like  '%SELECT   BOOK.DESCRIPTION AS%'  

order by first_load_time  desc  ; 


(2). 在資料庫上執行如下語句。 

select dbms_sqltune.report_sql_monitor(type=>'TEXT', sql_id=>'4t6jwa8nrg0dp',report_level=>'ALL') monitor_report from dual;


點選查詢出來的"HUGECLOB"值,可以看到TEXT格式的詳細執行計劃(最好儲存

為txt後以ultraEdit工具開啟,看得比較清晰,這裡不貼出來)。一般在SQL執行

後1-3分鐘內可以取到結果,SQL執行超過一定時間後查詢不出執行計劃(已經被刪除)。



注意:不是所有的SQL都會被monitor到,如果沒有看到執行計劃,可以在SQL中加入

      提示 /*+monitor*/ 強制對SQL進行監控。  

-------------------------------------------------------------------  

在Oracle 11g之前的版本,長時間執行的SQL可以透過監控v$session_longops來觀察,當某

個操作執行時間超過6秒,就會被記錄在v$session_longops中,通常可以監控到全表掃描、

全索引掃描、雜湊聯接、並行查詢等操作;而在Oracle 11g中,當SQL並行執行時,會立即

被實時監控到,或者當SQL單程式執行時,如果消耗超過5秒的CPU或I/O時間,它也會被監

控到。監控資料被記錄在v$sql_monitor檢視中,也可以透過Oracle 11g新增的package 

DBMS_MONITOR來主動對SQL執行監控部署。


v$sql_monitor收集的資訊每秒重新整理一次,接近實時,當SQL執行完畢,資訊並不會立即從

v$sql_monitor中刪除,至少會保留1分鐘,v$sql_plan_monitor檢視中的執行計劃資訊

也是每秒更新一次,當SQL執行完畢,它們同樣至少被保留1分鐘。檢視執行計劃type有

多種: 

type=>'TEXT'

type=>'HTML'

type=>'ACTIVE'  

------------------------------------------------------------------- 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2558328/,如需轉載,請註明出處,否則將追究法律責任。

相關文章