Oracle等待事件主要有两类事件:
1、空闲等待
空闲等待意味着Oracle正在等待某种动作的发生,实际上并不是因为繁忙而等待,而是因为没有事情做所以等待,如:smon timer,SMON进程的一些操作每隔一段时间循环执行的,即使系统不忙,此事件也不立即发生,而是等待计时器达到一定的时间才执行,此时出现的smon timer 等待事件,而系统并没有出现性能上的问题。多数的空闲等待对数据库性能的影响不大,可以不必过多的关注。
空闲等待事件有(加注释的比较典型):
1 dispatcher timer 调度器计时器
2 lock element cleanup
3 Null event null事件
4 parallel query dequeue wait
5 parallel query idle wait - Slaves
6 pipe get 管道取操作
7 PL/SQL lock timer
8 pmon timer- pmon
9 rdbms ipc message 数据库ipc 消息
10 slave wait
11 smon timer smon 计时器
12 SQL*Net break/reset to client
13 SQL*Net message from client 来自客户端的消息
14 SQL*Net message to client 发送消息到客户端
15 SQL*Net more data to client
16 virtual circuit status 虚拟环路状态消息
17 client message 客户机消息
2、 非空闲等待事件
通常数据库发生竞争时就会出现非空闲的等待事件,即某种操作A发生时,A所需要的资源正在被其他的操作占用,而这种独占的资源不能被操作A请求立即得到,操作请求被堵塞而发生等待。这些等待事件是我们在调整数据库的时候应该关注与研究的。非空闲的等待主要有:
Buffer busy wait:表示在等待对数据高速缓存区的访问,这种等待出现在会话读取数据到buffer中或者修改buffer中的数据时。
Db file parrle write:与dbwr进程相关的等待,一般都代表了io能力出现问题。通常与配置的多个dbwr进程或者dbwr的io slaves个数有关,当然也可能意味在设备上出现io竞争。
Db file scattered read:表示发生了与全表扫描的等待。通常意味者全表扫描过多,或者io能力不足,或者io竞争。
Db file sequential read:表示发生了与索引扫描有关的等待。
Db file single write:表示在检查点发生时与文件头写操作相关的等待。
Direct path read:表示与直接io读相关的等待。
Direct path write:表示与直接io读相关的等待。
Enqueue:表示与内部队列机制有关的等待,例如保护内部资源或者组件的锁的请求等,一种并发的保护机制。
Free buffer inspected:表示在将数据读入数据高速缓冲区的时候等待进程找到足够大的内存空间。
Free buffer waits:表示数据高速缓存区缺少内存空间,通常是数据高速缓冲区内存太小或者脏数据写出太慢导致。
Latch free:表示某个锁存器发生了竞争。
Library cache load lock :表示在将对象装入到库高速缓冲区的时候出现了等待,这种事件通常代表者发生了负荷很重的语句重载或者装载,可能由于sql语句没有共享池区域偏小导致的。
Library cache lock:表示与访问库高速缓存的多个进程相关的等待,通常表示不合理的共享池大小。
Library cache pin:这个等待事件也与库高速缓存的并发性有关,当库高速缓存中的对象被修改或者被检测的时候发生
Log buffer space:表示日志缓冲区出现了空间等待事件,这种等待事件意味者写日志缓冲区的时候得不到相应的内存空间,通常发生在日志缓冲区太小或者LGWR进程写太慢的时候。
Log file parallel write:表示等待LGWR向操作系统请求io开始直到完成io,在触发LGWR写的情况下入3秒,1/3,1MB、DBWR写之前可能发生,这种事件发生通常表示日志文件发生了io竞争或者文件所在的驱动器较慢。
Log file single write:表示写文件头块的时候出现了等待。一般都是发生在检查点发生时。
Log file switch (archiveing needed): 由于归档过慢造成日志无法进行切换而发生的等待,这种等待事件的原因可能比较多,最主要的原因是归档速度赶不上日志切换的速度,可能的原因包括了重作日志太了,重作日志组太少,归档能力低,归档文件发生了io竞争,归档日志挂起,或者归档日志放在了慢的设备上。
Log file switch (checkpoint incomplete):表示在日志切换的时候文件上的检查点还没有完成,一般意味者日志文件太小造成日志切换切换太快或者其他原因。
Log file sync :表示当服务进程发出commit或者rollbabk命令后,直到LGWR完成相关日志写操作这段时间的等待,如果有多个服务进程同时发出这种命令,LGWR不能及时完成日志的写操作,就有可能造成这种等待。
Transaction:表示发生一个阻赛回滚操作的等待。
Undo segment extension:表示在等待回滚段的动态扩展,这表示可能事务量过大,同时也意味者可能回滚段的初始大小不是最优,minextents设置偏小,考虑减少事务,或者使用最小区数更多的回滚段。