學(xué)習(xí)動(dòng)態(tài)性能表第13篇--V$OPEN_CURSOR
本視圖列出session打開(kāi)的所有cursors,很多時(shí)候都將被用到,比如:你可以通過(guò)它查看各個(gè)session打開(kāi)的cursor數(shù)。
當(dāng)診斷系統(tǒng)資源占用時(shí),它常被用于聯(lián)接v$sqlarea和v$sql查詢出特定SQL(高邏輯或物理I/O)。然后,下一步就是找出源頭。在應(yīng)用環(huán)境,基本都是同一類用戶登陸到數(shù)據(jù)庫(kù)(在V$SQLAREA中擁有相同的PARSING_USER_ID),而通過(guò)這個(gè)就可以找出它們的不同。V$SQLAREA中的統(tǒng)計(jì)項(xiàng)在語(yǔ)句完全執(zhí)行后被更新(并且從V$SESSION.SQL_HASH_VALUE中消失)。因此,你不能直接找到session除非語(yǔ)句被再次執(zhí)行。不過(guò)如果session的cursor仍然打開(kāi)著,你可以通過(guò)v$open_cursor找出執(zhí)行這個(gè)語(yǔ)句的session。
V$OPEN_CURSOR中的連接列
Column View Joined Column(s)
----------------------------- ---------------------------------------- -----------------------------
HASH_VALUE, ADDRESS V$SQLAREA, V$SQL, V$SQLTEXT HASH_VALUE, ADDRESS
SID V$SESSION SID
示例:
1.找出執(zhí)行某語(yǔ)句的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
--直接通過(guò)hash_value查找v$session,沒(méi)有記錄
SQL> SELECT sid FROM V$OPEN_CURSOR WHERE hash_Value = 1514306888 ;
SID
-----
1125
233
935
1693
531
5 rows selected.
--通過(guò)hash_value在v$open_cursor中查找sid(只有在session的cursor仍然打開(kāi)的情況下才有可能找到)
2.列出擁有超過(guò)400個(gè)cursor的sessionID
SQL> SELECT sid, count(0) ct FROM v$open_cursor
GROUP BY sid HAVING COUNT(0) > 400 ORDER BY ct desc;
事實(shí)上,v$open_cursor是一個(gè)相當(dāng)常用的視圖,特別是web開(kāi)發(fā)應(yīng)用的時(shí)候。僅通過(guò)它一個(gè)視圖你就能分析出當(dāng)前的連接情況,主要執(zhí)行語(yǔ)句等。