Oracle Wait Interface: V$EVENT_NAME

什么是 OWI (Oracle Wait Interface)? 在 Oracle Wait Interface: A Practical Guide to Performance Diagnostics & Tuning 这本书中是这么定义的:

Oracle Wait Interface is a collection of a few dynamic performance views and an extended SQL trace file.

这本书几乎覆盖了 OWI 的所有内容。是一本不错的Oracle数据库性能调整参考书。

从 7.0.12 版本开始,Oracle就有如下几个 OWI 视图:

  • V$EVENT_NAME
  • V$SESSION_WAIT
  • V$SESSION_EVENT
  • V$SYSTEM_EVENT

先分析一下这个 V$EVENT_NAME,看看在 10g 中有什么变化:

SQL> desc v$event_name;
 Name                       Null?    Type
 -------------------------- -------- ------------------
 EVENT#                              NUMBER
 NAME                                VARCHAR2(64)
 PARAMETER1                          VARCHAR2(64)
 PARAMETER2                          VARCHAR2(64)
 PARAMETER3                          VARCHAR2(64)

10g中新增了几列(注意字体加重的字段):

SQL> desc v$event_name
 Name                       Null?    Type
 -------------------------- -------- ------------------
 EVENT#                              NUMBER
 EVENT_ID                            NUMBER
 NAME                                VARCHAR2(64)
 PARAMETER1                          VARCHAR2(64)
 PARAMETER2                          VARCHAR2(64)
 PARAMETER3                          VARCHAR2(64)
 WAIT_CLASS_ID                       NUMBER
 WAIT_CLASS#                         NUMBER
 WAIT_CLASS                          VARCHAR2(64)

其中,PARAMETER1、PARAMETER2 PARAMETER3 对应 V$SESSION_WAIT 中的 P1、P2、P3,这是非常重要的几列。

基本用法:

SQL> SELECT   wait_class#, wait_class_id, wait_class
  2      FROM v$event_name
  3  GROUP BY wait_class#, wait_class_id, wait_class;

WAIT_CLASS# WAIT_CLASS_ID WAIT_CLASS
----------- ------------- ------------------------------
          0    1893977003 Other
          1    4217450380 Application
          2    3290255840 Configuration
          3    4166625743 Administrative
          4    3875070507 Concurrency
          5    3386400367 Commit
          6    2723168908 Idle
          7    2000153315 Network
          8    1740759767 User I/O
          9    4108307767 System I/O
         10    2396326234 Scheduler
         11    3871361733 Cluster

12 rows selected.

与 v$system_event 视图联合使用:

SQL> SELECT   n.wait_class, SUM (e.time_waited) / 1000000 time_waited
  2      FROM v$event_name n, v$system_event e
  3     WHERE n.NAME = e.event
  4  GROUP BY n.wait_class;

WAIT_CLASS                     TIME_WAITED
------------------------------ -----------
Application                              0
Commit                             .000024
Concurrency                        .000022
Configuration                      .000015
Idle                              3.669178
Network                                  0
Other                              .002454
System I/O                         .000393
User I/O                           .004079

9 rows selected.

v$event_name 从 X$ 表 X$ksled(Kernel Service Latch Event Descriptors) 而来(感谢 Rudolf Lu 友情提供的方便而实用的脚本!),创建语句类似如下:

SELECT inst_id, indx, ksledhash, kslednam, ksledp1, ksledp2, ksledp3,
       ksledclassid, ksledclass#, ksledclass
  FROM x$ksled;

对应的列:

MEANINGFUL NAME              X$ TABLE COLUMN NAME
=====================        ======================
event#                        indx
event_id                      ksledhash
name                          kslednam
parameter1                    ksledp1
parameter2                    ksledp2
parameter3                    ksledp3
wait_class_id                 ksledclassid
wait_class#                   ksledclass#
wait_class                    ksledclass

而 V$SESSION_WAIT 视图是基于 x$ksusecst 、x$ksled这两个固定表的,所以上文中提到的 v$event_name 的 PARAMETER1、PARAMETER2 PARAMETER3 对应 V$SESSION_WAIT 中的 P1、P2、P3 列也不足为奇了。

关于本文

This page contains a single entry by Fenng published on December 20, 2004 2:25 PM.

Buffer Cache Flushing was the previous entry in this blog.

AWStats 6.3 出来了 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.