第7 章、解釋與延遲有關的等待事件

紅葉DBA發表於2011-02-28

章、解釋與延遲有關的等待事件

1.          Log file sync 等待事件:

l  關鍵思想:

u  Log file sync 等待事件和事務的終止(提交或者回滾)有關。

u  當程式在此事件上等待太久,表明事務太短和過度的提交。

l  促使LGWR 程式寫日誌的動作有:

1)         每隔秒。

2)      日誌緩衝區1/3 已滿,或具有1M redo entry 

3)      使用者提交。

4)      DBWR 程式發出訊號(在記錄寫入之前,通常是由於髒資料太多,DBWR 急於寫髒資料)

l  log file sync 等待事件出現的原因:

1)         高提交頻率

2)      緩慢的I/O 子系統

3)      過大的log buffer

2.        Log buffer space 等待事件:

l  除了log buffer space 等待事件之外,Oracle 還在v$sysstat v$sesstat 檢視中記錄redo buffer allocation retries 統計。一般此事件是有種原因引起:SGA 中日誌緩衝區太小;LGWR 寫出日誌的速度太慢。

3.        Free buffer waits 等待事件:

l  將一個塊讀入記憶體之前,Oracle 必須在Buffer cache 中找到能夠存放該塊的位置,如果沒有足夠的空間來存放,那麼就需要清理LRU 中的塊,Oracle 9i 中預設掃描40% LRU ,如果還沒有找到,那麼就通知DBWR 程式寫髒資料,清除足夠的位置,當DBWR 程式工作時,Oracle 會話在buffer busy wait 上等待。

l  V$sysstat 中的log buffer inspected log buffer requested 統計資訊,記錄了Oracle 程式掃描LRU 和請求空緩衝區的次數,如果前者大於後者,則表明系統可能有不正常的情況。

l  會話在log buffer waits 上的等待可能有5 種原因:

1)         低效率的SQL 語句。

2)      不充足的DBWR 程式:

從檢視x$kcbwds 中可以檢視工作集和DBWR 程式的對應關係:select set_id,dbwr_num from x$kcbwds;

3)      緩慢的IO 子系統。

4)      延遲塊清除(delay cleanout 

Oracle DBWR 程式以各種時間間隔將已提交和未提交的塊寫入到磁碟中,在事物提交時,Oracle 對沒有寫出的塊執行提交清除,對已經寫出的塊不做處理,這些不做處理的塊,在下一次讀取時被讀取程式執行清除操作,這就是延遲塊清除。

5)      較小的緩衝儲存器

4.        Write complete waits 等待事件:

l  關鍵思想:阻止Oracle 修改DBWR 程式正在寫入的塊。

l  當前臺程式想要修改被DBWR 程式標記為“正在寫入”的塊,而標記為“正在寫入”的塊是不能被修改的,直到他們被寫入磁碟並將標記清除。造成此等待事件的原因通常有:

1)         緩慢的I/O 子系統造成高DBWR 寫出時間。

2)      MTTR 太短,造成頻繁的寫出操作。

3)      DBWR 寫出批量尺寸太大,造成每次寫出的時間過長。

4)      Oracle 8i 之前的寫出批量是4096 塊,從8i 開始預設寫批量的大小改為204 塊。

5.        Log file switch completion 等待事件:

l  關鍵思想:較小的日誌檔案和大量的redo entry 造成了過多的日誌切換。

l  我們通常是保持在高峰期間每隔15~30min 切換一次日誌檔案。

6.        Log file switch(checkpoint incomplete) 等待事件:

l  由於檢查點未完成,切換日誌的操作被迫等待。


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

相關文章