學習動態性能表
第十篇--V$SESSION_LONGOPS? 2007.6.7
?
本視圖顯示運行超過6秒的操作的狀態。包括備份,恢復,統計信息收集,查詢等等。
?
要監控查詢執行進展狀況,你必須使用cost-based優化方式,并且:
- 設置TIMED_STATISTICS或SQL_TRACE參數值為true。
- 通過ANALYZE或DBMS_STATS數據包收集對象統計信息。
?
你可以通過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列說明
?
- SID:Session標識
- SERIAL#:Session串號
- OPNAME:操作簡要說明
- TARGET:操作運行所在的對象
- TARGET_DESC:目標對象說明
- SOFAR:至今為止完成的工作量
- TOTALWORK:總工作量
- UNITS:工作量單位
- START_TIME:操作開始時間
- LAST_UPDATE_TIME:統計項最后更新時間
- TIME_REMAINING:預計完成操作的剩余時間(秒)
- ELAPSED_SECONDS:從操作開始總花費時間(秒)
- CONTEXT:前后關系
- MESSAGE:統計項的完整描述
- USERNAME:執行操作的用戶ID
- SQL_ADDRESS:用于連接查詢的列
- SQL_HASH_VALUE:用于連接查詢的列
- QCSID:
?
示例:
找一較大表,確認該表查詢將超過6秒,哎呀讓它快咱沒把握,讓它慢這可是我的強項啊~~
SQL> set timing on
SQL> create table ttt as select level lv,rownum rn from dual connect by level<10000000;?? --創建一個臨時表
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
?