【TUNE_ORACLE】等待事件之IO等待“db file parallel write”

Attack_on_Jager發表於2021-04-30

定義

此等待顯示在database writer中。當等待對檔案和塊的並行寫入完成時,DBW等待“ db file parallel write” 。等待將一直持續到所有IO提交完成為止。但需要注意, 該等待事件和並行操作,如並行查詢和並行DML,沒有任何關係。並且該事件發生在資料庫恢復的時候,當有一些資料塊需要恢復時,Oracle會以並行的方式將它們從資料檔案中讀入到記憶體中,來進行資料恢復。當Oracle從多個資料檔案中並行的物理讀取多個塊到記憶體的不連續緩衝中,如buffer cache或PGA,也可能發生該等待事件。

 

對於自身範圍內產生的等待

1. 檢視動態效能檢視V$SESSION_WAIT涉及到的“db file parallel write”引數

P1 = files

P2 = blocks

P3 = requests / timeout

注:

files:表示Oracle正在寫入的檔案數

blocks:表示要寫入的總塊數

requests / timeout:從Oracle9.2開始的欄位P3,是以秒為單位顯示等待IO完成的超時值;在Oracle9.2之前,這表示I/O請求的總數,與欄位P2相同

 

另外:從9.2.0.5到10.2,定義已更改:

P1 = requests  --這表示I/O請求的總數與塊相同

P2 = interrupt

P3 = timeout  --這表示等待IO完成的超時值(以釐秒為單位)

 

2. 等待時間

等待將一直持續到所有提交的IO請求都完成為止。在Oracle9.2之前的等待中沒有Oracle timeout。從9.2開始, timeout由欄位P3顯示。

 

對於系統範圍內產生的等待

如果這個佔了總等待時間的大頭,不一定會對使用者會話產生很大影響。如果使用者會話在“write complete waits”和“free buffer waits”中的兩者或其中一個顯示出大量等待時間,則這會影響使用者會話。對IO子系統的影響可能不太明顯,因為寫入操作可能會影響從同一磁碟讀取的會話的讀取時間。

可以檢查以下幾個地方:

1. 檢視發生寫入的位置(但是V$SYSTEM_EVENT裡的寫入時間一般是錯誤的)

2. 利用作業系統IO子系統監視工具來檢視寫入效能

3. 檢視目標恢復時間是否導致從快取寫入過多的塊

 

減少等待和等待時間的方法

1. 如果這個等待事件佔比很大,可以使用優化“db file sequential read”的方法,連結: http://blog.itpub.net/69992972/viewspace-2770523/

2. 由於11g新增的prefetch特性導致該等待事件,可以設定如下三個隱藏引數:

alter system set “_db_file_noncontig_mblock_read_count”= 0 scope=spfile sid=‘*’;
alter system set “_db_block_prefetch_quota”= 0 scope=spfile sid=‘*’;
alter system set “_db_block_prefetch_limit”= 0 scope=spfile sid=‘*’;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992972/viewspace-2770571/,如需轉載,請註明出處,否則將追究法律責任。

相關文章