18 Database Recovery
Database Recovery
ARIES
Log Sequence Numbers
MasterRecord 被硬编码到 DBMS,所以我们恢复时这个页面会先被拉到内存中
仅仅当 pageLSN <= flushLSN,才能将 log 刷入磁盘
所有的记录都有一个 LSN
每次一个事务修改一个页上的 record,pageLSN 会改变
每次 DBMS 将 WAL buffer 中的东西写入磁盘,flushedLSN 会更新
Normal Execution
Transaction Commit
我们只需要保证在刷新 flushLSN 之前先将日志记录刷新到磁盘即可
TXN-END 写入后说明 commit 已经成功,所以 wal 可以清除没有用的 Log
Transaction Abort
prevLSN 维护一个链表允许我们追踪 abort 事务的记录链表
我们在 abort 和 end 之间可能存在其他日志,我们需要维护这些日志;我们不会在 abort 时立即将这些记录刷写到磁盘
Compensation Log records
是对 update 的撤销操作
undoNextLSN 是一个效率优化,而不是一个核心优化
Abort Algorithm
Checkpoints
Non-Fuzzy Checkpoints
- 任何新事务开始都会被停止
- 所有活跃的事务等待直到 checkpoint 执行完成
- 将所有的脏页刷新到磁盘
Slightly better Checkpoints
暂停事务,然后将部分提交的数据写入磁盘;
缩短了等待时间,但是磁盘上存储的并非是稳定快照
Active Transaction Table(ATT)
Dirty Page Table(DPT)
ATT 和 DPT 必须刷进磁盘后再恢复事务执行
Fuzzy Checkpoints
复制了 ATT 和 DPT 的副本在内存中
任何在
之后开始的事务会被 的 ATT 排除
ARIES - Recovery Algorithm
Overview
Analysis Phase
analysis 的过程仅仅是确定 ATT 和 DPT
Redo Phase
Undo Phase
Additional Crash Issues
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LZY的Code生活!