一次優化log_buffer_space的經歷

hooca發表於2014-09-19
當向一張表中插入大量資料時,EM中發現有log_buffer_space等待事件。該等待事件是由於重做量超出日誌緩衝區而產生的。

下面介紹實驗環境:

1. 日誌緩衝區預設大小6M。
2. 表的行寬:NUMBER(9)*1+NUMBER(1)*76=85
3. 計劃一次插入1百萬行。

lgwr什麼時候開始空工作的,它要有觸發他的動作
  A. 重做日誌緩衝區的已使用的空間達到三分之一時
  B. 當dbwn程式向磁碟寫入已修改的緩衝區的時候
  C. 每隔3秒鐘
  D. 使用者提交事務處理時的一條提交記錄(經常commit會及時重新整理重做日誌緩衝區空間)

如果我們每50,000行提交一次,那麼50,000*85>6M的1/3,因此根據上面的A,將觸發LGWR把log_buffer寫入redo log,這就是LOG BUFFER SPACE產生的原因!

知道了這點,我們調整為每20,000行提交一次,這樣提交前將不會超過日誌緩衝區的1/3。

比較一下,單次提交量和時間的區別:

25,000 00:04:37.62
50,000 00:04:50.34
10,000 00:04:40.33
20,000 00:04:35.52

結論,20,000最佳!

注意到:不是越小越好,比如10,000就比20,000花更多時間,批量提交應儘可能越多越好,但不能超過LOG BUFFER的1/3警戒線。

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

相關文章