从Oracle10g开始,伴随ASH功能的引入,Oracle对V$SESSION视图进行了彻底改造。
关于V$SESSION在几个版本中结构变化可以参考:Oracle数据字典说明
从Oracle10gR1开始,Oracle在V$SESSION中增加关于等待事件的字段,实际上也就是把原来V$SESSION_WAIT视图中的所有字段全部整合到了V$SESSION视图中,开始的时候我还以为ASH是依靠联合查询来获取信息的,仔细一看才发现现在V$SESSION已经发生了变化。(假如进一步研究你会发现,实际上V$SESSION的底层查询语句及X$表已经有了变化)
这一变化使得我们的查询得以简化,但是也使得V$SESSION_WAIT开始变得多余。
此外V$SESSION中还增加了BLOCKING_SESSION等字段,以前我们需要通过dba_waiters等视图才能获得的信息,现在也可以直接从V$SESSION中得到了。
在Oracle10gR2中,Oracle又为V$SESSION增加了额外几个字段:
SERVICE_NAME
SQL_TRACE
SQL_TRACE_WAITS
SQL_TRACE_BINDS
这几个字段又显示当前session连接方式及是否启用sql_trace等
我们看到Oracle在小处动的手脚是非常多的,而无疑这些小手脚会给我们的治理维护带来极大的方便。
以下是Oracle10gR2种v$session和v$session_wait两个view的结构供参考:
SQL desc v$session
NameNull?Type
----------------------------------------- -------- ----------------------------
SADDRRAW(4)
SIDNUMBER
SERIAL#NUMBER
AUDSID NUMBER
PADDRRAW(4)
USER#NUMBER
USERNAME VARCHAR2(30)
COMMANDNUMBER
OWNERIDNUMBER
TADDRVARCHAR2(8)
LOCKWAIT VARCHAR2(8)
STATUS VARCHAR2(8)
SERVER VARCHAR2(9)
SCHEMA#NUMBER
SCHEMANAME VARCHAR2(30)
OSUSER VARCHAR2(30)
PROCESSVARCHAR2(12)
MACHINEVARCHAR2(64)
TERMINAL VARCHAR2(30)
PROGRAMVARCHAR2(48)
TYPE VARCHAR2(10)
SQL_ADDRESSRAW(4)
SQL_HASH_VALUE NUMBER
SQL_ID VARCHAR2(13)
SQL_CHILD_NUMBER NUMBER
PREV_SQL_ADDRRAW(4)
PREV_HASH_VALUENUMBER
PREV_SQL_IDVARCHAR2(13)
PREV_CHILD_NUMBERNUMBER
MODULE VARCHAR2(48)
MODULE_HASHNUMBER
ACTION VARCHAR2(32)
ACTION_HASHNUMBER
CLIENT_INFOVARCHAR2(64)
FIXED_TABLE_SEQUENCE NUMBER
ROW_WAIT_OBJ#NUMBER
ROW_WAIT_FILE# NUMBER
ROW_WAIT_BLOCK#NUMBER
ROW_WAIT_ROW#NUMBER
LOGON_TIME DATE
LAST_CALL_ET NUMBER
PDML_ENABLED VARCHAR2(3)
FAILOVER_TYPEVARCHAR2(13)
FAILOVER_METHODVARCHAR2(10)
FAILED_OVERVARCHAR2(3)
RESOURCE_CONSUMER_GROUPVARCHAR2(32)
PDML_STATUSVARCHAR2(8)
PDDL_STATUSVARCHAR2(8)
PQ_STATUSVARCHAR2(8)
CURRENT_QUEUE_DURATION NUMBER
CLIENT_IDENTIFIERVARCHAR2(64)
BLOCKING_SESSION_STATUSVARCHAR2(11)
BLOCKING_INSTANCENUMBER
BLOCKING_SESSION NUMBER
SEQ# NUMBER
EVENT# NUMBER
EVENTVARCHAR2(64)
P1TEXT VARCHAR2(64)
P1 NUMBER
P1RAWRAW(4)
P2TEXT VARCHAR2(64)
P2 NUMBER
P2RAWRAW(4)
P3TEXT VARCHAR2(64)
P3 NUMBER
P3RAWRAW(4)
WAIT_CLASS_IDNUMBER
WAIT_CLASS#NUMBER
WAIT_CLASS VARCHAR2(64)
WAIT_TIMENUMBER
SECONDS_IN_WAITNUMBER
STATEVARCHAR2(19)
SERVICE_NAME VARCHAR2(64)
SQL_TRACEVARCHAR2(8)
SQL_TRACE_WAITSVARCHAR2(5)
SQL_TRACE_BINDSVARCHAR2(5)
SQL desc v$session_wait
NameNull?
Type
----------------------------------------- -------- ----------------------------
SIDNUMBER
SEQ# NUMBER
EVENTVARCHAR2(64)
P1TEXT VARCHAR2(64)
P1 NUMBER
P1RAWRAW(4)
P2TEXT VARCHAR2(64)
P2 NUMBER
P2RAWRAW(4)
P3TEXT VARCHAR2(64)
P3 NUMBER
P3RAWRAW(4)
WAIT_CLASS_IDNUMBER
WAIT_CLASS#NUMBER
WAIT_CLASS VARCHAR2(64)
WAIT_TIMENUMBER
SECONDS_IN_WAITNUMBER
STATEVARCHAR2(19)
SQL