日誌緩衝區(redo log buffer)及日誌寫進程(LGWR)剖析

                                                   日誌緩衝區(redo log buffer)及日誌寫進程(LGWR)剖析



REDO LOG BUFFER:

日誌中記錄數據塊的地址,更改的時間以及對數據塊做了哪些改變。

Oracle在執行任何DML和DDL操作改變數據之前,都會將恢復所需要的信息,先寫入redo log buffer,然後再寫入database buffer cache。

① 如果數據和回滾數據不在database buffer cache中,server process會將它們從dbf文件中讀取到database buffer cache中。

② server process會在要修改的數據行上添加行級鎖。

③ server process將數據的變化信息和回滾所需的信息都寫入redo log buffer

④ server process將對數據所做的修改後的數據信息寫入database buffer cache,然後將database buffer cache中的這些數據標記爲髒數據(此時內存中的數據和磁盤上的數據是不一致的)。

⑤ LGWR將重做日誌緩衝區中的數據寫入重做日誌文件中。

⑥ DBWndatabase buffer cache的髒數據寫入數據文件中。

LGWR:

LGWR的觸發條件:

1.事務提交時

2.Log buffer中的數據超過1m時

3.當log buffer中的數據超過_log_io_size隱含值時

4.每隔3s

當事務提交時,會產生一個提交的redo record,這個redo record寫入log buffer後,服務器進程(server process)會觸發LGWR進行日誌寫操作。

有些系統中,平均每個事務的大小很大,有的爲1m甚至更大,但是平均下來每秒的事務數卻很小,這樣通過提交來觸發LGWR工作的機會很小,很有可能導致數據的積壓,而數據量超過1m觸發LGWR進行日誌寫操作正是爲了解決這種情況。

_log_io_size參數的默認值是log buffer的三分之一,這個參數的意義是當log buffer中的buffer佔用量超過這個參數的數值時會觸發LGWR進行日誌寫操作,從而防止log buffer空間被消耗殆盡。

如果一個系統長時間沒有事務提交,log buffer中的空間也很空閒,就可能導致log buffer中的數據長時間不寫入redo log file中,增加數據丟失的風險,所以oralce通過每隔3s觸發一次LGWR進行日誌寫操作大大的降低了這種風險。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章