non-idle(非空闲)等待事件,在我们进行数据库的调整时要深入的关注和研究。一些常见的非空闲等待时间如下:
1、db file scattered read
2、db file sequential read
3、buffer busy wait
4、free buffer wait
5、enqueue
6、latch free
7、log file parallel write
8、log file sync
9、library cache pin
下面对这几个常见的等待事件进行一一的学习:
下面对这几个常见的等待事件进行一一的学习:
1、db file scattered read
这种情况一般都跟全表扫描有关,当进行全表扫描的时候,oracle为了提高性能,数据会分散(scattered)的读入buffer cache,如果这个事件比较显著,可能说明某些表没有创建索引,或者创建的索引不合适。我们需要检查这些表是不是进行的正确的设置。但是这个事件并不一定就表示性能低下,因为有的时候oracle根据CBO会得出全表扫描比用索引性能更好,从而用全表扫描来替代索引,这跟读取的数据量有关。当这个事件比较显著的时候,我们可以结合v$session_longops 来进行诊断,这个视图记录了运行时间比较长的transaction (超过6秒),可能会有很多的全表扫描。
2、db file sequential read
这个事件通常显示与单个数据块相关的读取操作(如索引读取),如果这个等待事件比较显著,可能表示在多表连接中,表的连接顺序存在问题,可能没有正确的使用驱动表;或者可能说明不加选择地进行索引。在大多数情况下我们说,通过索引可以更为快速的获取记录,所以对于一个编码规范、调整良好的数据库,这个等待很大是很正常的。但是在很多情况下,使用索引并不是最佳的选择,比如读取较大表中大量的数据,全表扫描可能会明显快于索引扫描,所以在开发中我们就应该注意,对于这样的查询应该进行避免使用索引扫描
3、buffer busy wait
当一个session准备去读取buffer cache 里的数据块,而这时,这个数据块被其他的session使用,这时就会产生buffer busy wait,
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26031282/viewspace-716876/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26031282/viewspace-716876/