上一篇文档中提到,从 7.0.12 版本开始,V$SESSION_WAIT 就是如下四个基本 OWI 视图之一。
- V$EVENT_NAME
- V$SESSION_WAIT
- V$SESSION_EVENT
- V$SYSTEM_EVENT
现在看看 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_CLASS_ID NUMBER
WAIT_CLASS# NUMBER
WAIT_CLASS VARCHAR2(64)
WAIT_TIME NUMBER
SECONDS_IN_WAIT NUMBER
STATE VARCHAR2(19)
SQL>
加粗的列是 10g 新增的,其中 STATE 列 的描述如下(参考 Oracle Database Reference 10g Release 1 Part Number B10755-01):
- 0 - WAITING (当前等待的 Session)
- -2 - WAITED UNKNOWN TIME (最后等待持续时间未知)
- -1 - WAITED SHORT TIME (最后的等待 <1/100 秒)
- >0 - WAITED KNOWN TIME (WAIT_TIME = 最后等待持续时间)
该视图的 P1RAW,P2RAW,P3RAW 列对应 P1,P2,P3 的十六进制值;P1TEXT,P2TEXT,P3TEXT 列对应 P1,P2,P3 列的解释。
该视图从 x$ksusecst (Kernel Services Session status Contents for events) 和 x$ksled(Kernel Service Latch Event Descriptors) 得来:
SELECT s.inst_id, s.indx, s.ksussseq, e.kslednam, e.ksledp1, s.ksussp1,
s.ksussp1r, e.ksledp2, s.ksussp2, s.ksussp2r, e.ksledp3, s.ksussp3,
s.ksussp3r, e.ksledclassid, e.ksledclass#, e.ksledclass,
DECODE (s.ksusstim,
0, 0,
-1, -1,
-2, -2,
DECODE (ROUND (s.ksusstim / 10000),
0, -1,
ROUND (s.ksusstim / 10000)
)
),
s.ksusewtm,
DECODE (s.ksusstim,
0, 'WAITING',
-2, 'WAITED UNKNOWN TIME',
-1, 'WAITED SHORT TIME',
DECODE (ROUND (s.ksusstim / 10000),
0, 'WAITED SHORT TIME',
'WAITED KNOWN TIME'
)
)
FROM x$ksusecst s, x$ksled e
WHERE BITAND (s.ksspaflg, 1) != 0
AND BITAND (s.ksuseflg, 1) != 0
AND s.ksussseq != 0
AND s.ksussopc = e.indx;
在 10g 中 V$SESSION 包含的信息更为全面,基本取代了 V$SESSION_WAIT 。