理解redo(9)10g R2后oracle對redo寫的增強

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,即沒有立即進行日志寫。

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享