这里总结了几种常见的非空闲等待事件
buffer busy waits:表示在等待对数据高速缓冲区的访问,这种等待事件通常出现在会话读取数据到buffer中或者修改buffer中的数据时,例如DBWR正在写一些数据块到数据文件的同时,其他进程需要去读取相应的数据块。同时也可能表示着在表上设置的free list太少了,不能大量并发的insert操作。在v$session_wait视图的p1字段值表示相关数据块所在的文件编号,P2则表示文件上的块编号,通过dba_data_file和dba_extents联合查询就可以很快的定位到发生竞争的存储对象。
db file parallel write:与dbwr进程相关的等待,一般代表I/O能力出现了问题。通常与配置的多个DBWR进程或者是DBWR的I/O salves个数有关,当然也意味着在设备上存在I/O竞争
db file scattered read:表示发生了与全表扫描相关的等待。通常意味着全表扫描过多,或者I/O能力不足或者是I/O竞争
db file sequential read: 表示发生了与索引扫描相关的等待。同样意味着/O能力不足或者是I/O竞争
db file single write:表示发生检查点时与文件头写操作相关等待。通常与检查点同步数据文件头时文件号序乱有关
direct path read:表示直接I/O读相关的等待。当直接读数据到PGA内存时,direct path read出现。这些类型的读请求典型的作为:排序IO(当排序不能在内存中完成时)并行slave查询或者预先读。通常也与I/O有关
direct path write:同上,只是操作为写
enqueue:表示与内部队列机制相关的等待,例如保护内部资源或者是组件的锁的请求等,是一种并发的保护机制
free buffer inspected:表示将数据读入高速缓存区的时候等待进程找到足够大的内存空间。通过这类等待事件表示数据高速缓存区偏小
free buffer waits:表示数据高速缓存区缺少内存空间。通常与数据高速缓存区内存太或者是脏块数据写出太慢有关。这种情况下,可以考虑增大数据高速缓存区或者通过设置更多地DBWR来增加脏数据的的写能力
latch free:表示莫个锁存器上发生了竞争。首先应该确保已经提供了足够多的latch数,如果仍然发生这种等待事件,那么应该进一步确定是哪种锁存器上发生了竞争(在v$session_wait上的P2字段表示了锁存器的标号),然后再判断是什么引起了这种锁存器的竞争,如SQL语句书写不合理带来了大量的硬解析
library cache pin:这个等待事件也与库高速缓存的多个并发有关,当库高速缓存中的对象被修改或者是被检测的时候发生
undo segment extension:表示在等待回滚段的动态扩展。这表示可能事务量过大,同时也意味着可能回滚段的初始大小不是最优的,minextents设置得偏小。考虑减少事务,或者使用最小区数更大的回滚段。
log buffer space:表示日志缓存区出现了空间等待事件。这种等待事件意味写日志缓存区的时候得不到相应的内存空间,通常发生在日志缓冲区太小或者是LGWR进程太慢的时候
SQL*Net Message From Client:这种等待事件大多数的时候是可以被忽试的,它表示服务等待客户进程返回一些回应信息。