會
事務處理過程
update 或Insert操作:
1.計算更新後tuple到原tuple的delta資訊,把這個delta複製到回滾段,作為undo;
2.寫redo日誌,記錄對回滾段的更改,回滾段也是由緩衝區管理機構管理,也是相當於對頁面(page)的更改;
3.把緩衝區中的對應tuple更新成新值,把新值的rollback pointer寫入undo(更改回滾段);
4.寫redo日誌,記入對頁(回滾段)的更改;
5.將被更改的頁面的狀態改成dirty,表示要被刷盤
事務提交操作:
日誌刷盤,當前事務的對應的最後的LSN(Log Sequence Number)之前的redo日誌都被寫入持久化儲存。
崩潰恢復過程
1.啟動開始時,檢測是資料庫在上次退出時是否發生崩潰;
2.定位到最近的一個檢查點(checkpoint);
3.定位在這個檢查點時刷磁碟的資料頁,檢查校驗checksum。如果不正確,說明這個頁在上次寫入是不完整的,從雙寫緩衝(doublewrite buffer)裡把正確的頁讀出來,更新到記憶體緩衝區中的頁;
4.順序地(從上個檢查點開始到最後一個LSN)分析redo日誌,標識出未提交事務;
5.順序執行redo,這些redo日誌不僅包含對資料段的更改(寫tuple), 也包括對回滾段的更改(寫undo log);
6.回滾所有未提交的事務。
會
事務處理過程
update 或Insert操作:
1.計算更新後tuple到原tuple的delta資訊,把這個delta複製到回滾段,作為undo;
2.寫redo日誌,記錄對回滾段的更改,回滾段也是由緩衝區管理機構管理,也是相當於對頁面(page)的更改;
3.把緩衝區中的對應tuple更新成新值,把新值的rollback pointer寫入undo(更改回滾段);
4.寫redo日誌,記入對頁(回滾段)的更改;
5.將被更改的頁面的狀態改成dirty,表示要被刷盤
事務提交操作:
日誌刷盤,當前事務的對應的最後的LSN(Log Sequence Number)之前的redo日誌都被寫入持久化儲存。
崩潰恢復過程
1.啟動開始時,檢測是資料庫在上次退出時是否發生崩潰;
2.定位到最近的一個檢查點(checkpoint);
3.定位在這個檢查點時刷磁碟的資料頁,檢查校驗checksum。如果不正確,說明這個頁在上次寫入是不完整的,從雙寫緩衝(doublewrite buffer)裡把正確的頁讀出來,更新到記憶體緩衝區中的頁;
4.順序地(從上個檢查點開始到最後一個LSN)分析redo日誌,標識出未提交事務;
5.順序執行redo,這些redo日誌不僅包含對資料段的更改(寫tuple), 也包括對回滾段的更改(寫undo log);
6.回滾所有未提交的事務。