學習動態性能表web
第13篇--V$OPEN_CURSOR 2007.6.8sql
本視圖列出session打開的全部cursors,不少時候都將被用到,好比:你能夠經過它查看各個session打開的cursor數。數據庫
當診斷系統資源佔用時,它常被用於聯接v$sqlarea和v$sql查詢出特定SQL(高邏輯或物理I/O)。而後,下一步就是找出源頭。在應用環境,基本都是同一類用戶登錄到數據庫(在V$SQLAREA中擁有相同的PARSING_USER_ID),而經過這個就能夠找出它們的不一樣。V$SQLAREA中的統計項在語句徹底執行後被更新(而且從V$SESSION.SQL_HASH_VALUE中消失)。所以,你不能直接找到session除非語句被再次執行。不過若是session的cursor仍然打開着,你能夠經過v$open_cursor找出執行這個語句的session。session
V$OPEN_CURSOR中的鏈接列性能
Column View Joined Column(s) 學習
----------------------------- ---------------------------------------- -----------------------------資源
HASH_VALUE, ADDRESS V$SQLAREA, V$SQL, V$SQLTEXT HASH_VALUE, ADDRESS開發
SID V$SESSION SIDget
示例:hash
1.找出執行某語句的session:
SELECT hash_value, buffer_gets, disk_reads
FROM V$SQLAREA
WHERE disk_reads > 1000000
ORDER BY buffer_gets DESC;
HASH_VALUE BUFFER_GETS DISK_READS
---------- ----------- ----------
1514306888 177649108 3897402
478652562 63168944 2532721
360282550 14158750 2482065
3 rows selected.
SQL> SELECT sid FROM V$SESSION WHERE sql_hash_value = 1514306888 ;
no rows selected
--直接經過hash_value查找v$session,沒有記錄
SQL> SELECT sid FROM V$OPEN_CURSOR WHERE hash_Value = 1514306888 ;
SID
-----
1125
233
935
1693
531
5 rows selected.
--經過hash_value在v$open_cursor中查找sid(只有在session的cursor仍然打開的狀況下才有可能找到)
2.列出擁有超過400個cursor的sessionID
SQL> SELECT sid, count(0) ct FROM v$open_cursor
GROUP BY sid HAVING COUNT(0) > 400 ORDER BY ct desc;
事實上,v$open_cursor是一個至關經常使用的視圖,特別是web開發應用的時候。僅經過它一個視圖你就能分析出當前的鏈接狀況,主要執行語句等。