學習動態性能表(13)--v$open_cursor

學習動態性能表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開發應用的時候。僅經過它一個視圖你就能分析出當前的鏈接狀況,主要執行語句等。

相關文章
相關標籤/搜索