I/O上的等待事件 —— db file parallel write

时间:2022-08-20 07:53:44

经过高速缓冲区的所有数据是通过DBWR写入到磁盘上的。DBWR请求写入脏块的I/O后,在此工作结束期间等待db file parallel write事件。

SQL> select event#,name,parameter1,parameter2,parameter3 from v$event_name where name = 'db file parallel write';

EVENT# NAME PARAMETER1 PARAMETER2 PARAMETER3
---------- ------------------------------ --------------- --------------- ---------------
119 db file parallel write requests interrupt timeout
这个等待事件包含三个参数。
requests:操作需要执行的I/O次数。
interrupt:(Reference上面也没有做说明)
timeout:等待的超时时间。

1、I/O系统的性能缓慢时
db file parallel write等待的发生原因和解决方法如下:
如果DBWR进程上db file parallel write等待时间表现得过长,就可以判断为I/O系统上有问题。如果DBWR上的db file parallel write等待时间延长,服务器进程就会接连经历free buffer waits事件或write complete waits事件的等待。这个问题可以通过改善I/O系统解决,改善I/O性能的方法如下:
(1)组合使用裸设备和异步I/O是目前为止的最好方法。

(2)OS级上使用Direct I/O。若CPU数量充足,可以调整db_writer_processes参数值,将DBWR数量增加。多个DBWR具有模拟异步的效果。oracle推荐的DBWR进程是CPU_COUNT/8。


2、I/O工作过多时
频繁发生检查点时,DBWR的活动量过多,可能导致DBWR的性能降低。DBWR的性能与整个系统的性能有直接的联系。将fast_start_mttr_target(MTTR指平均恢复时间,数据库进行崩溃恢复需要的秒数。)参数值设定过小时,将频繁发生增量检查点工作。日志文件过小时,将频繁发生日志文件的转换,因此检查点工作将增加。因Parallel Query发生direct path read时,在truncate、drop、hot backup时也发生检查点。如果I/O系统上不存在性能问题,但还是广泛出现db file parallel write等待,就应该检查是否存在给DBWR带来不必要的负荷的因素。


3、不能有效使用高速缓存区时
间接改善DBWR性能的另一种方法是合理使用多重缓冲池。与其说这个方法能改善I/O系统的性能,不如说是因为不必要的写入工作减少,进而减少了DBWR的负担。