DB2的日志理解难点
在DB2中最早的recovery時間點,是由minBuffLsn 和 lowTranLsn 的最小值決定的。
minBuffLsn: represents the oldest change to a page in the buffer pool?that has not been written and persisted to disk yet.
lowTranLsn: represents the oldest active uncommitted transaction?(specifically the LSN of the first log record it wrote).
在DB2和ORACLE數據庫都還有一個約定,從buffer pool中寫數據到磁盤之前其對應的redo log必須先從log buffer pool中寫到磁盤中。
注意:這里的log buffer pool中的redo log沒有要求是已經committed的。
所以,在數據庫中,還沒有被提交的數據被寫到磁盤中是很正常的事情,只要這塊數據所對應的redo log已經被寫入到磁盤中,對于這個交易是否已經提交,不關緊要。
那么在recovery的時候就會出現這樣的情況:
minBuffLsn < lowTranLsn : 有已經提交的交易(commit動作會觸發數據庫將對應的redo log寫入到磁盤)數據還有沒有被從buffer pool中寫入到磁盤,所以recovery時從minBuffLsn對應的log開始,redo后面那些已經提交的或者未提交的交易,重建transaction table。
lowTranLsn > minBuffLsn : 有還沒有提交的交易(但是redo log是已經寫入到磁盤中的)的數據已經被寫入到磁盤中,所以recovery時將從lowTranLsn對應的log開始,這部分數據已經被寫入到磁盤中的redo log只是讀取一下,創建transaction table。
這張圖片做出了比較清晰的解釋。
轉載于:https://www.cnblogs.com/jackhub/p/3219512.html
總結
以上是生活随笔為你收集整理的DB2的日志理解难点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单链表 操作的18种算法
- 下一篇: Oracle 数据库数据排名函数:ran