10G R2后,oracle提供了一個新參數commit_write來控制客戶端commit后,ORACLE寫日志的行為。這個參數值有四種組合。 immediate , wait 注釋:Server process在提交時使用semctl發送信號給LGWR,通知其Flush Log Buffer,并等待LGWR發回的消息(semtimedop). LGWR
10G R2后,Oracle提供了一個新參數commit_write來控制客戶端commit后,ORACLE寫日志的行為。這個參數值有四種組合。
·? immediate , wait
注釋:Server process在提交時使用semctl發送信號給LGWR,通知其Flush Log Buffer,并等待LGWR發回的消息(semtimedop).
LGWR在接收到消息后, Flush log buffer到磁盤,通過semctl發送信號給Server Process,告知其commit成功.
·? immediate , nowait
·? batch , wait
注釋:Server Process在提交時使用semctl發送信號給LGWR,要求其提交后通知此Server Process進程,并等待此消息返回(運行semtmdop)
LGWR在經過一定的內部時間(Timeout)后, Flush Log Buffer到磁盤,并使用semctl通知此Server Process進程
·? batch , nowait
傳統的,我們的默認寫方式都是immediate , wait。代表server process立即通知LGWR刷新日志,LGWR刷新完log buffer后通知server process,COMMIT成功。
如果用了nowait選項,your session doesn’t send a message to lgwr at all。不管是batch,還是immediate,在指定nowait時候,事務都是在in the near future進行提交,
而不是立即提交。因為,由下圖可知:Immediate nowait和Batch nowait的redo synch writes次數都是0,即沒有立即進行日志寫。