轉載: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
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')
- 操作說明: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(超時)
- 等待時間:無超時