oracle 分析实例性能 4
•Direct Path Read和Direct Path Write
direct path read (直接路径读)和direct path write(直接路径写)事件是发生在绕过SGA缓冲区高速缓存,执行PGA的直接读或写时的等待。直接路径读表示排序在磁盘上而不是在内存中进行。它们也可能由繁忙的I/O系统所导致。如果采用自动PGA调优,不应该经常遇到这个问题。
Oracle自动进行PGA调优应该会减少由于较低的PGA内存分配而导致的磁盘排序。另一个解决方案是增加磁盘的数目,因为这个问题也会导致I/O系统不能满足増加的将块读入PGA的请求。当然,调优SQL语句本身以减少排序在这种情形下也不会有坏处。
•Free Buffer Waits
free buffer waits®常出现在数据库写进程较慢时。数据座写进程不能满足维护缓冲区高速缓存的请求。高速缓存中等待写到磁盘的脏缓冲区的数目比数据库写入进程每批可写的缓冲区的数目大.同时,会话必须等待,因为它们不能获得供写入的可用缓冲区。
首先,需要排除缓冲区高速缓存是否太小的问题,并利用操作系统工具检査服务器上的I/O数,特别是等待时间。检査数据库缓冲区高速缓存,并浏览一下Database Control的Memory Advisor将使你了解到各种内存组件的使用模式,以及缓冲区高速缓存是否低于最佳水平。如果缓冲区高速缓存低于最佳水平,可增加缓冲区高速缓存的尺寸。当然, 如果使用Automatic Shared Memory管理,数据库将会自动设置SGA的尺寸。
系统中出现大量free buffer waits的另-原因是数据库写进程的数目不够,不能完成实例需要完成的1:作亀。此时,可在默认的数据库写进程数目之上增加更多的写进程,使得主机上每8个处理器可以有一个数据库写进程。如果数据库执行了大量的数据修改,并且数据库写进程引发了等待事件,多数情况下,设置DB_WRITER_PROCESSES初始化参数为2-10之间的值,可以增加数据库写入进程的数目,从而减少这些等荐。Oracle建议对系统上每4个CPU使用一个数据库写进程。DB_WRITER_PROCESSES初始化参数不能动态更改,因此为更改数据库写进程的数目需要重启系统。
•Enqueue Waits
入队等待(enqueue)类似于锁,它们都是控制资源访问的内部机制。较高的入队等待指出大量的会话lE在等待其他会话持有的锁。可査询动态性能视图V$ENQUEUE_STAT査看哪些队列需要的等待时间最多。可使用V$ENQUEUE_STAT视图的cum_wait_time列来完成该工作。
请注意,使用本地管理的表店间消除了几种入队等待,如空事务(ST)入队等待。在有大量并发用户的系统中,最常见的入队等待是由于事务不常提交(或回滚),使其他事务等待前面事务持有的锁而引起的。此外,可能存在有用的事务列表(ITL)槽太少的问题,这也显示为事务(TX)入队等待。本地管理的表空间能避免最常见的与空间有关的入队等待。
•Latch Free
闩是一种内部串行化机制,用来保护SGA中的共享数据结构。可将闩视为一种在极短时间内持有的锁。Oracle有几种类型的闩,每种类型保护对一组特定的数据的访问。在进程第一次尝试但不能取得闩时,闩空闲等待事件(latch free wait event)増加。
如果得不到闩,则请求它的进程保持循环并再次试图对其进行访问。这种循环增加了系统中的等待时间和CPU的使用。Oracle使用大约500个闩,但显示在等待统计数据中的两种最重要闩是shared pool latch (和库髙速缓存闩)和cache buffers LRU chain,在实例中看到大量的闩空闲等待事件是很正常的。但如果这种事件所耗费的总时间很高时就应该注意了。