v$session 和 v$session_wait

v$session 和 v$session_wait:
由于v$session记录当前连接数据库的Session信息,而v$session_wait视图记录这些Session的等待,很多时候要联合这两个视图进行查询以获得更多的诊断信息。从Oracle 10g开始,为了方便用户,Oracle开始将这两个视图进行整合。

在Oracle 10gR1中,Oracle在v$session中增加关于等待事件的字段,实际上也就是把原来v$session_wait视图中的所有字段全部整合到了v$session视图中(如果进一步研究你会发现,实际上v$session的底层查询语句及X$表已经有了变化)。这一变化使得查询得以简化,但是也使得v$session_wait开始变得多余。

此外v$session中还增加了BLOCKING_SESSION等字段,以前需要通过dba_waiters等视图才能获得的信息,现在也可以直接从v$session中得了。

在Oracle 10gR2中,Oracle又为v$session增加了额外几个字段:SERVICE_NAME、SQL_TRACE、SQL_TRACE_WAITS、SQL_TRACE_BINDS。这几个字段显示当前Session连接方式是否启用了SQL_TRACE跟踪等。

在Oracle 11gR1中,v$session的内容进一步增强,增加了很多新的字段,比如SQL_EXEC_START、SQL_EXEC_ID用于记录SQL执行的开始时间及执行ID(相应的还有PREV_EXEC_START、PREV_EXEC_ID等字段)。

sys@CCDB> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
Session altered.
sys@CCDB> select sid,username,sql_exec_start,sql_exec_id from v$session
  2  where sql_exec_id is not null;
       SID USERNAME        SQL_EXEC_START      SQL_EXEC_ID
---------- --------------- ------------------- -----------
       857 SYS             2010-02-25 17:02:46    16777217

在新的数据库版本中,Oracle在小处动的手脚也是非常多的,而无疑这些小手脚会给用户的管理维护带来极大的方便。以下是Oracle 9iR2中的v$session_wait视图的结构:

SQL> desc v$session_wait
Name      Null?       Type
-------- -------- -------------------
SID           NUMBER
SEQ#           NUMBER
EVENT           VARCHAR2(64)
P1TEXT           VARCHAR2(64)
P1           NUMBER
P1RAW           RAW(4)
P2TEXT           VARCHAR2(64)
P2           NUMBER
P2RAW           RAW(4)
P3TEXT           VARCHAR2(64)
P3           NUMBER
P3RAW           RAW(4)
WAIT_TIME       NUMBER
SECONDS_IN_WAIT   NUMBER
STATE           VARCHAR2(19)

其中,event代表等待事件的名称,p<n>text用以描述具体的参数,p<n>分别代表以十进制定义的参数(parameter)参数值,p<n>RAW是以十六进制表示的参数值。对于不同event,具体参数表示的含义也不相同,可以通过v$event_name视图来查看这些参数的定义。

- The End -