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