Database Recovery¶
约 429 个字 27 张图片 预计阅读时间 2 分钟
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