(轉):學習Oracle動態效能表-(8)-V$SESSION

xz43發表於2010-11-16

V$SESSION

  在本檢視中,每一個連線到例項中的session都擁有一條記錄。包括使用者session及後臺程式如DBWRLGWRarcchiver等等。

V$SESSION中的常用列

V$SESSION是基礎資訊檢視,用於找尋使用者SIDSADDR。不過,它也有一些列會動態的變化,可用於檢查使用者。如例:

SQL_HASH_VALUESQL_ADDRESS:這兩列用於鑑別預設被session執行的語句。如果為null0,那就說明這個session沒有執行任何SQL語句。PREV_HASH_VALUEPREV_ADDRESS兩列用來鑑別被session執行的上一條語句。

注意:當使用SQL*Plus進行選擇時,確認你重定義的列寬不小於11以便看到完整的數值。

STATUS:這列用來判斷session狀態是:

l        Achtive:正執行SQL語句(waiting for/using a resource)

l        Inactive:等待操作(即等待需要執行的SQL語句)

l        Killed:被標註為刪除

下列各列提供session的資訊,可被用於當一個或多個combination未知時找到session

Session資訊

l        SIDSESSION標識,常用於連線列

l        SERIAL#:如果某個SID又被其它的session使用的話則此數值自增加(當一個       SESSION結束,另一個SESSION開始並使用了同一個SID)

l        AUDSID:審查session ID唯一性,確認它通常也用於當尋找並行查詢模式

l        USERNAME:當前sessionoracle中的使用者名稱。

Client資訊

資料庫session被一個執行在資料庫伺服器上或從中間伺服器甚至桌面透過SQL*Net連線到資料庫的客戶端程式啟動,下列各列提供這個客戶端的資訊

l        OSUSER:客戶端使用者名稱

l        MACHINE:客戶端執行的機器

l        TERMINAL:客戶端執行的終端

l        PROCESS:客戶端程式的ID

l        PROGRAM:客戶端執行的客戶端程式

要顯示使用者所連線PCTERMINALOSUSER,需在該PCORACLE.INI中設定關鍵字TERMINALUSERNAME

Application資訊

呼叫DBMS_APPLICATION_INFO包以設定一些資訊區分使用者。這將顯示下列各列。

l        CLIENT_INFODBMS_APPLICATION_INFO中設定

l        ACTIONDBMS_APPLICATION_INFO中設定

l        MODULEDBMS_APPLICATION_INFO中設定

下列V$SESSION列同樣可能會被用到:

l        ROW_WAIT_OBJ#

l        ROW_WAIT_FILE#

l        ROW_WAIT_BLOCK#

l        ROW_WAIT_ROW#

V$SESSION中的連線列

Column                                                            View                                              Joined Column(s)

SID             V$SESSION_WAIT,,V$SESSTAT,,V$LOCK,V$SESSION_EVENT,V$OPEN_CURSOR                 SID

(SQL_HASH_VALUE, SQL_ADDRESS)                  V$SQLTEXT, V$SQLAREA, V$SQL    (HASH_VALUE, ADDRESS)

(PREV_HASH_VALUE, PREV_SQL_ADDRESS)     V$SQLTEXT, V$SQLAREA, V$SQL    (HASH_VALUE, ADDRESS)

TADDR                                                             V$TRANSACTION                                    ADDR

PADDR                                                              V$PROCESS                                             ADDR

示例:

1.查詢你的session資訊

SELECTSID, OSUSER, USERNAME, MACHINE, PROCESS

FROMV$SESSIONWHEREaudsid = userenv('SESSIONID');

2.machine已知的情況下查詢session

SELECTSID, OSUSER, USERNAME, MACHINE, TERMINAL

FROMV$SESSION

WHEREterminal ='pts/tl'ANDmachine ='rgmdbs1';

3.查詢當前被某個指定session正在執行的sql語句。假設sessionID100

selectb.sql_text

fromv$session a,v$sqlarea b

wherea.sql_hash_value=b.hash_valueanda.sid=100

尋找被指定session執行的SQL語句是一個公共需求,如果session是瓶頸的主要原因,那根據其當前在執行的語句可以檢視session在做些什麼。


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

相關文章