1、等待事件的源起
谈到等待事件,必然会提到一种流行的诊断方法论OWI,即Oracle Wait Interface.
等待事件的概念大概是从Oracle 7.0.12中引入的,刚引入的时候大约有100多个等待事件,在Oracle 8.0中这个数目增大到了大约150个,在Oracle 8i中大约有220个事件,在Oracle 9i中大约有400多个等待事件,在Oracle 10gR2中,大约有800多个等待事件,在11gR2中约有1000多个等待事件。随着等待事件的逐步完善,也能够反映出对于问题的诊断粒度越来越细化。
虽然不同版本和组件安装可能会有不同数目的等待事件,但是这些等待事件都可以通过查V$EVENT_NAME视图获得:
select count(1) from v$event_name;
2、分类
ORACLE的等待事件,主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件。
1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件。
2). 非空闲等待事件专门针对ORACLE的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件是在调整数据库的时候需要关注与研究的。
常见的空闲事件有:
? dispatcher timer
? lock element cleanup
? Null event
? parallel query dequeue wait
? parallel query idle wait - Slaves
? pipe get
? PL/SQL lock timer
? pmon timer- pmon
? rdbms ipc message
? slave wait
? smon timer
? SQL* Net break/reset to client
? SQL* Net message from client
? SQL* Net message to client
? SQL* Net more data to client
? virtual circuit status
? client message
一些常见的非空闲等待事件有:
? db file scattered read
? db file sequential read
? buffer busy waits
? free buffer waits
? enqueue
? latch free
? log file parallel write
? log file sync
3.1、等待事件的类别
每个等待事件都属于一类等待事件。下面的列表描述了每个等待类。
Administrative 行政
由DBA命令导致的等待(例如,索引重建)
Application 应用
由用户应用程序代码引起的等待(例如,行级锁定或显式锁定命令引起的锁等待)
Cluster 集群
与实际应用程序群集资源相关的等待(例如,全局缓存资源,如“gc-cr-block-busy”)
Commit 提交
这个等待类只包含一个等待事件 — 提交后等待恢复日志写入确认(即“log file sync日志文件同步”)。
Concurrency 并发性
等待内部数据库资源(例如,latches)
Configuration 配置
由于数据库或实例资源配置不足而导致的等待(例如,日志文件大小不足、共享池大小)
Idle 空闲的
表示会话处于非活动状态的等待,等待工作(例如,“SQL*Net message from client”)
Network 网络
与网络消息传递相关的等待(例如,“SQL*NET MOREDATA TO DBLINK”)
Other 其他
通常不应在系统上发生的等待(例如,“等待emon生成”)
Queue 排队
包含表示在管道环境中获取额外数据延迟的事件。在这些等待事件上花费的时间表示效率低下或管道中的其他问题。它影响诸如Oracle流、并行查询或DBMS_PIPEPL/SQL包等功能。
Scheduler 调度程序
与资源管理器相关的等待(例如,“resmgr:become active”)
System I/O 系统I/O
等待后台进程I/O(例如,DBWR等待’db file parallel write’)
User I/O 用户I/O
等待用户I/O(例如’db file sequential read’)