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 。