Skip to content

模糊检查点

Fuzzy checkpoint · Non-quiescent checkpoint

在事务和页刷新继续进行时记录事务表与脏页表的保守快照,为恢复扫描提供较近起点而不要求停机刷净。

条目类型
方法

形式陈述

模糊检查点允许事务更新、提交与缓冲页写回在检查点期间继续。以 预写日志 为基础,系统先写 BEGIN_CHECKPOINT,随后收集并写入 END_CHECKPOINT;后者至少携带:

  • Transaction Table:活跃事务的状态与 lastLSN
  • Dirty Page Table:可能尚未落盘的页及各自 recLSN

检查点完成记录稳定后,master record 才原子地指向这次完整检查点的起始位置。崩溃恢复从该位置开始,把检查点内容与之后扫描到的日志合并;它不能直接把表当成崩溃瞬间的最终状态。

“模糊”表示收集期间系统未静止,两个表甚至未必对应同一物理瞬间。正确算法采用保守合并:DPT 对同一页保留足够早的 recLSN,Transaction Table 不用较旧状态覆盖扫描中看到的更新。ARIES随后用完整 Analysis 重建崩溃点状态。

对同一页,检查点给出的 recLSN 与扫描中已有值合并时取不会漏掉更新的较小者;对事务状态,则保持更先进的 COMMIT/ABORT/END 信息。合并规则必须逐字段定义,简单用 END_CHECKPOINT 整表覆盖当前结果是不可靠的。

检查点不要求把所有脏页刷盘。后台可以顺便清理部分页以缩短未来 redo,但正确性来源是日志与表的边界,而不是“检查点之后磁盘等于内存”。

直觉

传统静止检查点像关门盘点:停止营业、摆平所有货架再记账。模糊检查点像营业中拍摄一组带时间标记的库存照片。单张照片可能落后,但只要记录从哪里继续看流水账,恢复者就能把照片与后续事件拼成完整现场。

它换取更短停顿,却没有免费消除工作。检查点越旧、DPT 越大,重启扫描和 redo 候选越多;检查点过密又增加日志与采集开销。

检查点更像恢复书签,不是持久性分界线。事务 commit 仍由自己的日志刷盘规则决定,页是否能淘汰仍由 WAL 决定;书签只让 Analysis 不必从日志开头重建全部状态。

例子与边界

检查点开始前,DPT 含 P60,Q80,活跃事务 T3lastLSN=90。系统写

text
100: BEGIN_CHECKPOINT
110: T4 UPDATE R
120: END_CHECKPOINT {TT snapshot, DPT snapshot}

采集线程可能在 LSN 110 前已经复制 Transaction Table,因而 END 记录里没有 T4;也可能尚未看见 R。恢复 Analysis 从 100 扫描时会看到 LSN 110,并把 T4R 加入重建状态;处理 120 时只能合并快照,不能用缺项把刚发现的状态删除。

只有 LSN 120 已稳定后,master 才改指向 100。若在此之前崩溃,旧 master 仍指向上一个完整检查点,恢复多扫描一段日志但不使用半次检查点。若 master 指针本身可能撕裂,还需双副本、校验或底层原子写保证。

只记录 DPT 不够:恢复还要知道哪些事务活跃、已提交或正在回滚,才能选出 loser 和 undo 起点。反过来,只记录 Transaction Table 也无法确定 redo 应从哪个页的哪条日志开始。

若检查点采集期间页 P 已被刷净又再次变脏,新一轮 recLSN 应对应再次变脏后的首条日志。恢复实现必须与缓冲管理器同步维护 DPT;从最终 pageLSN 倒推 recLSN 会遗漏“何时可能尚未落盘”的历史边界。

推论与应用

模糊检查点把恢复时间控制变成可调参数。系统可按日志量、脏页量或时间触发,并通过后台刷写推进 DPT;这些策略影响成本,不改变 BEGIN/END 稳定顺序与两张表的最低信息要求。

监控“最近检查点 LSN”时应区分 begin、end 和 master 已发布的位置。仅看到 BEGIN 记录不能宣称检查点可用;仅看到大量页已刷盘也不能替代事务状态。故障注入应覆盖采集期间、END 刷盘前后与 master 切换前后。

检查点日志本身也会占空间。截断旧日志前,系统要同时考虑最早脏页 recLSN、仍需 undo 的事务链、备份与复制消费者;“已有新检查点”不保证此前所有日志都可立即删除。

参考资料
  • C. Mohan et al., “ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging,” ACM Transactions on Database Systems 17(1), 1992, pp. 94–162。
  • Jim Gray and Andreas Reuter, Transaction Processing: Concepts and Techniques, Morgan Kaufmann, 1992, Ch. 11。
  • Philip A. Bernstein, Vassos Hadzilacos, and Nathan Goodman, Concurrency Control and Recovery in Database Systems, Addison-Wesley, 1987, recovery chapters。
关系图谱5 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

被这些条目使用