2013年12月8日 星期日

[Tips]深入了解V$ - V$session

V$:Dynamic Performance View,又稱為動態視圖,它是儲存在SGA之中。可以透過SELECT * FROM dba_objects WHERE object_name like 'V_$%'來查詢。


根據Oracle Documentation的說明:
This view lists session information for each current session.

--說明了Server process建立與Oracle Server之間的Session連線,而V$session儲存了連線時的相關資訊。

1)V$session常會用到的欄位
欄位
敘述
SID
標識值(SID會重複使用, 常用來連結其它V$
SERIAL#
SID重複時, SERIAL#會增加
USERNAME
使用哪個Oracle帳號登入
COMMAND
執行什麼類型的SQL(儲存數字, 對應AUDIT_ACTIONS才能了解)
PADDR
process address關聯到V$processaddr
TADDR
transaction address關聯到V$processaddr
LOCKWAIT
正在等待lock的訊息, 關聯到V$lockkaddr
STATUS
session的狀態
SERVER
dedicated or shared mode
OSUSER
客戶端作業系統的用戶名稱
MACHINE
客戶端作業系統的電腦名稱
TERMINAL
客戶端的終端機名稱
PROGRAM
客戶端的應用程式
TYPE
background or user process
SQL_ADDRESS
正在執行的SQL address 關聯到V$sqladdress
SQL_HASH_VALUE
正在執行的SQL hash value, 關聯到V$sqlhash_value
SQL_ID
正在執行的SQL id 關聯到V$sqlid
SQL_CHILD_NUMBER
正在執行的SQL child數量, 關聯到V$sqlchild_number
PREV_SQL_ADDR
上一次執行的SQL address
PREV_HASH_VALUE
上一次執行的SQL hash value
PREV_SQL_ID
上一次執行的SQL id
PREV_CHILD_NUMBER
上一次執行的SQL child數量
ROW_WAIT_OBJ#
lockobject_id, 關聯到dba_objects中的object_id
ROW_WAIT_FILE#
lockdatafile_id, 關聯到v$datafile中的file#
ROW_WAIT_BLOCK#
lockblock
ROW_WAIT_ROW#
lockrow
LOGON_TIME
登錄時間

從上面可以知道,V$session是一個相當頻繁會被使用到的動態視圖,它與process, transaction, lock等皆有相關聯,也常會搭配v$sesstat, v$session_wait因此所包含的應用也很多,以下列出該視圖的簡單應用。

2)查詢自己的Session相關訊息
select sid, osuser, username, machine, process
from v$session
where audsid = userenv('SESSIONID');

3)查詢使用者執行的Process
select a.sid, b.program, b.pga_used_mem/1024/1024 pga_used_mb
from v$session a, v$process b
where a.paddr=b.addr;

4)查詢當前被執行的SQL

select a.sid, b.sql_text
from v$session a, v$sqlarea b
where a.sql_id=b.sql_id;