您的位置:首页 > 数据库 > Oracle

非空闲的等待事件-db file parallel write

2014-05-14 15:04 337 查看
转载:http://blog.itpub.net/79291/viewspace-910224/

db file parallel write

(SYSTEM I/0类)(DBWR专属等待事件)

与其名称暗示相反,该事件不与任何并行DML操作相关。

该等待事件属于DBWR进程,DBWR进程负责向数据文件写入脏数据块的唯一进程,即DBWR进程执行对使用SGA的所有数据库写入。阻塞该进程的是操作系统的IO子系统。当然DBWR进程的写入操作也会对同一磁盘操作的其他会话造成影响。

DBWR查找脏块的时机:

>> 每隔三秒一次的查找。

>> 当前台提交需要清除缓冲区内容时。

>> 当满足_DB_LARGE_DIRTY_QUEUE / _DB_BLOCK_MAX_DIRTY_TARGET / FAST_START_MTTR_TARGET阈值。
[@more@]

缓慢的DBWR操作可以造成前台会话在write complete waits(前台不允许修改正在传输到磁盘的块)或free buffer waits(DBWR不能满足释放缓冲区的需求)事件上。通过以下语句可以获知该事件的平均等待时间,如果平均等待时间大小10cs,则表明IO缓慢。如果不存在db
file parallel write事件,很可能初始化参数disk_async_io=FALSE,这种情况一般发生在AIX和HPUX平台上。

SELECT s.event,
s.time_waited, s.average_wait 
FROM v$system_event

WHERE s.event IN ('db
file parallel write', 'free buffer waits', 
'write
complete waits')

相关查询:

SELECT * 
FROM v$sysstat 
WHERE NAME IN ('write
clones created in background', 
'write
clones created in foreground')

操作说明:DBWR将一组脏数据编成"写入批量组",然后发布多个IO请求以将"写入批量组"写入数据文件,然后以此事件等待直到IO请求都完成。但是,当使用异步IO时,DBWR不等待整个批量写入完成,仅等待一定百分比的IO操作完成后,就将空闲缓冲区推到LRU链以使其可用。

解决方法:

>> 如果平均等待时间长,要选择使用正确的IO操作。如果数据文件在裸设备上,并且平台支持异步IO,请应该使用异步IO。如果数据文件位于文件系统上,则应该使用同步写入和直接IO。相关的初始化参数是DISK_ASYNCH_IO和FILESYSTEMIO_OPTIONS。

>> 如果重做位于祼设备上,而数据文件位于文件系统上,则可以设置DISK_ASYNCH_IO=TRUE,FILESYSTEMIO_OPTIONS=DIRECTIO。使用这种方法可以获得对于祼设备使用异步IO,而对于文件系统使用直接IO的效果。

>> 使用DB_WRITER_PROCESSES选项产生多个DBWR进程。

参数说明:

事件号:190

事件名:db file parallel write

参数一:requests(DBWR写入批量的大小-块数)

参数二:interrupt(中断)

参数三:timeout(超时)

等待时间:无超时
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 数据库