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

  1. 任何新事务开始都会被停止
  2. 所有活跃的事务等待直到 checkpoint 执行完成
  3. 将所有的脏页刷新到磁盘

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