天天看點

學習動态性能表 第五篇--V$SESSION

學習動态性能表

第五篇--V$SESSION 

  在本視圖中,每一個連接配接到資料庫執行個體中的session都擁有一條記錄。包括使用者session及背景程序如DBWR,LGWR,arcchiver等等。

V$SESSION中的常用列

V$SESSION是基礎資訊視圖,用于找尋使用者SID或SADDR。不過,它也有一些列會動态的變化,可用于檢查使用者。如例:

SQL_HASH_VALUE,SQL_ADDRESS:這兩列用于鑒别預設被session執行的SQL語句。如果為null或0,那就說明這個session沒有執行任何SQL語句。PREV_HASH_VALUE和PREV_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               SID:SESSION辨別,常用于連接配接其它列

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

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

l               USERNAME:目前session在oracle中的使用者名。

Client資訊

資料庫session被一個運作在資料庫伺服器上或從中間伺服器甚至桌面通過SQL*Net連接配接到資料庫的用戶端程序啟動,下列各列提供這個用戶端的資訊

l               OSUSER:用戶端作業系統使用者名

l               MACHINE:用戶端執行的機器

l               TERMINAL:用戶端運作的終端

l               PROCESS:用戶端程序的ID

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

要顯示使用者所連接配接PC的 TERMINAL、OSUSER,需在該PC的ORACLE.INI或Windows中設定關鍵字TERMINAL,USERNAME。

Application資訊

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

l               CLIENT_INFO:DBMS_APPLICATION_INFO中設定

l               ACTION:DBMS_APPLICATION_INFO中設定

l               MODULE:DBMS_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資訊

SELECT SID, OSUSER, USERNAME, MACHINE, PROCESS

 FROM V$SESSION WHERE audsid = userenv('SESSIONID');

2.當machine已知的情況下查找session

SELECT SID, OSUSER, USERNAME, MACHINE, TERMINAL

 FROM V$SESSION

 WHERE terminal = 'pts/tl'AND machine = 'rgmdbs1';

3.查找目前被某個指定session正在運作的sql語句。假設sessionID為100

select b.sql_text

 from v$session a,v$sqlarea b

 where a.sql_hash_value=b.hash_valueand a.sid=100

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