Oracle Wait Interface: V$SESSION_WAIT

上一篇文档中提到,从 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 。


Leave a Reply

Your email address will not be published. Required fields are marked *