在以前的的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了事務,在數據庫恢復時也是不一定找得回來的。但從安全換效率的角度考慮,此做法也不失為權益之計。
COMMIT WRITE BATCH NOWAIT