Chinaunix首页 | 论坛 | 博客
  • 博客访问: 349511
  • 博文数量: 79
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 42
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-30 12:25
文章分类

全部博文(79)

文章存档

2019年(1)

2017年(19)

2016年(25)

2015年(30)

2014年(4)

分类: Oracle

2016-08-31 19:50:14

db file parallel write (SYSTEM I/0类)(DBWR专属等待事件)

  1. 与其名称暗示相反,该事件不与任何并行DML操作相关。
  2. 该等待事件属于DBWR进程,DBWR进程负责向数据文件写入脏数据块的唯一进程,即DBWR进程执行对使用SGA的所有数据库写入。阻塞该进程的是操作系统的IO子系统。当然DBWR进程的写入操作也会对同一磁盘操作的其他会话造成影响。
  3. DBWR查找脏块的时机:

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

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

>> 当满足_DB_LARGE_DIRTY_QUEUE / _DB_BLOCK_MAX_DIRTY_TARGET / FAST_START_MTTR_TARGET阈值。

  1. 缓慢的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 s
 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')

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

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

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

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

  1. 参数说明:

事件号:190

事件名:db file parallel write

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

参数二:interrupt(中断)

参数三:timeout(超时)

  1. 等待时间:无超时
阅读(1029) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~