(轉):學習Oracle動態效能表-(16)-V$OPEN_CURSOR

xz43發表於2012-09-27

  本檢視列出session開啟的所有cursors,很多時候都將被用到,比如:你可以透過它檢視各個session開啟的cursor數。

  當診斷系統資源佔用時,它常被用於聯接v$sqlareav$sql查詢出特定SQL(高邏輯或物理I/O)。然後,下一步就是找出源頭。在應用環境,基本都是同一類使用者登陸到資料庫(V$SQLAREA中擁有相同的PARSING_USER_ID),而透過這個就可以找出它們的不同。V$SQLAREA中的統計項在語句完全執行後被更新(並且從V$SESSION.SQL_HASH_VALUE中消失)。因此,你不能直接找到session除非語句被再次執行。不過如果sessioncursor仍然開啟著,你可以透過v$open_cursor找出執行這個語句的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.找出執行某語句的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_valuev$open_cursor中查詢sid(只有在sessioncursor仍然開啟的情況下才有可能找到)

2.列出擁有超過400cursorsessionID

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開發應用的時候。僅透過它一個檢視你就能分析出當前的連線情況,主要執行語句等。

人生有三寶:終身運動,終身學習,終身反醒.吸收新知,提高效率,懂得相處,成就自己,也成就他人,創造最高價值。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9399028/viewspace-745235/,如需轉載,請註明出處,否則將追究法律責任。

相關文章