在Oracle10gR2中調整過於頻繁user commit的一個方法

sxzhanghl發表於2009-03-21

我們知道在以往的Oracle版本中,如果commit,那麼後臺的LGWR程式一定會將記憶體中的redo資料寫入online redo log檔案中,然後再將控制權返回給使用者(當然,其實這段也可能不是磁碟操作,而是寫入到磁碟緩衝中)。如果應用中有過於頻繁的使用者commit,那麼可能會產生明顯的log file sync的等待事件。

而Oracle10g中的新功能-Asynchronous Commit可能是解決這個問題的一個新方法(只是看文件自己猜測,並沒有真正實踐)。

在Oracle10g中我們可以設定commit的行為來做到在commit之後,控制權立刻返回給使用者,而Oracle會在恰當的時候喚醒LGWR,批量更新online redo log檔案。

我們可以作系統級的更改:
ALTER SYSTEM SET COMMIT_WRITE = BATCH, NOWAIT

同樣也可以在commit時單獨使用:
COMMIT WRITE BATCH NOWAIT

但是問題在於,這樣作的結果,是否意味著即使commit了的事務,在資料庫恢復時也是不一定找得回來的。用安全換效率,迫不得已的做法吧。


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

相關文章