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

轉載:http://blog.itpub.net/79291/viewspace-910224/

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閾值。

[@more@]
  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. 等待時間:無超時
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章