學習動態性能表sql
第十篇--V$SESSION_LONGOPS 2007.6.7session
本視圖顯示運行超過6秒的操做的狀態。包括備份,恢復,統計信息收集,查詢等等。app
要監控查詢執行進展情況,你必須使用cost-based優化方式,而且:性能
你能夠經過DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS過程添加application-specific長運行操做信息到本視圖。關於DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS的更多信息能夠瀏覽:Oracle Supplied PL/SQL Packages and Types Reference。學習
V$SESSION_LONGOPS列說明優化
示例:對象
找一較大表,確認該表查詢將超過6秒,哎呀讓它快咱沒把握,讓它慢這但是個人強項啊~~ci
SQL> set timing onhash
SQL> create table ttt as select level lv,rownum rn from dual connect by level<10000000; --建立一個臨時表it
Table created
Executed in 19.5 seconds
SQL> commit;
Commit complete
Executed in 0 seconds
SQL> select * from (select * from ttt order by lv desc) where rownum<2; --執行一個費時的查詢
LV RN
---------- ----------
9999999 9999999
Executed in 9.766 seconds --哈哈,成功超過6秒
SQL> select sid,opname,sofar,totalwork,units,sql_hash_value from v$session_longops; ----看看v$session_longops中是否是已經有記錄了
SID OPNAME SOFAR TOTALWORK UNITS SQL_HASH_VALUE
---------- ---------------------------------------------------------------- ---------- ---------- -------------------------------- --------------
10 Table Scan 47276 47276 Blocks 2583310173
Executed in 0.047 seconds
SQL> select a.sql_text from v$sqlarea a,v$session_longops b where a.HASH_VALUE=b.SQL_HASH_VALUE; --經過hash_value聯繫查詢出剛執行的查詢語句。
SQL_TEXT
--------------------------------------------------------------------------------
select * from (select * from ttt order by lv desc) where rownum<2
Executed in 0.063 seconds