v$session 檢視

531968912發表於2016-01-22
v$session 是我學到現在認為最重要也是最基礎的一張檢視,他儲存著最基礎的資料庫資訊,
比如,SADDR、SID、USERNAME、MACHINE 等,這些都是會話的最基礎的資訊,我們在查詢任何效能問題的時候都免不了的要用到這張檢視,
下面對這張檢視和其他一些檢視之間的關係做進一步瞭解,主要是做一個詳細的梳理,理清之間的聯絡。
1、一般來說,我們在查詢等待事件或者死鎖的時候都會用到這張檢視,例如,我們在查詢資料庫死鎖問題中,在查詢死鎖程式的時候,
我們就可以關聯v$session檢視和v$locked_object
檢視,透過關聯v$session中的sid和v$locked_object中的session_id來查詢到產生鎖的sid和serial#
而當我們知道了sid後,我們還希望透過sid來查詢對應的產生鎖的作業系統會話的程式號,那麼可以透過sid查詢到對應v$session中的paddr
進一步在v$process中查詢到spid也就是作業系統程式號。
2、再比如,在10g中,oracle將v$session_wait整個到了v$session中,使得我們可以更加方便的獲得等待事件資訊。
3、檢視資料庫的併發數:select count(*) from v$session where status='ACTIVE';
關聯v$sqlarea 我們可以關聯v$sqlarea來檢視當前哪些使用者正在使用資料庫:
4、透過關聯v$session中的sql_address和v$sqlarea中的address。
在這裡我們區分一下v$session中的process和v$process中的spid,v$session中的process表示客戶端程式ID,
即客戶端程式在客戶端機器上的程式ID號。也就是說v$session中表示的客戶端程式在客戶端機器上的程式號,而v$process則
表示伺服器程式在伺服器上的程式號。這兩者還是有很大的差別。比如,你是用sqlplus連的資料庫,那麼v$session中
的process其實就是你的sqlplus在OS中的程式號,而v$process中的spid才是你回話的程式號。
5、v$session檢視和v$sesstat檢視的關聯,我們知道v$sesstat檢視記錄的是會話其間的資訊,透過v$session檢視我們可以對當前連線到資料庫的會話進行獲取分析,而透過過v$session中的sid和v$sesstat,我們可以查詢與這個session相關的各種統計資訊,處理資訊.當然對於v$sesstat中的STATISTIC#我們還需要透過查詢v$statname,來獲得。
6、v$session中的阻塞資訊,v$session中阻塞資訊的加入:BLOCKING_SESSION_STATUS、BLOCKING_INSTANCE、BLOCKING_SESSION      
BLOCKING_SESSION 引數記錄了造成當前等待session的程式ID
SQL> select sid,username,BLOCKING_SESSION,BLOCKING_INSTANCE,BLOCKING_SESSION_STATUS from v$session where username='SYS';

       SID USERNAME   BLOCKING_SESSION BLOCKING_INSTANCE BLOCKING_SE
---------- ---------- ---------------- ----------------- -----------
      2159 SYS                                           NOT IN WAIT
      2165 SYS                                           NO HOLDER
      2166 SYS                                           NO HOLDER
      2182 SYS                    2165                 1 VALID
我們可以看到2165號回話正在阻塞程式2182,從而可以更快的定位等待事件。

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

相關文章