恢复与日志记录
恢复和日志记录机制通过在日志中记录更改来保证事务的原子性和持久性,以便在系统崩溃后,已提交的工作可以重做,未提交的工作可以撤销。
用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
Learn & explore
视频即将推出
Definition
数据库恢复是指在发生故障后将数据库恢复到一致状态的过程,确保已提交事务的效果是持久的,并且已中止或正在进行中的事务不留下任何痕迹;日志记录是一种将事务操作记录到持久日志中的技术,以使恢复成为可能。
Scope
本主题涵盖数据库如何从故障中恢复:预写式日志(WAL)协议、撤销和重做信息、用于限制恢复工作的检查点,以及带有分析、重做和撤销阶段的标准恢复算法(特别是ARIES)。它还讨论了决定所需日志记录的缓冲管理策略(窃取/不窃取、强制/不强制)。它不包括在正常操作期间运行的并发控制协议和分布式提交,这些是相邻主题。
Core questions
- 为什么日志记录必须在其描述的数据之前到达持久存储(预写式日志)?
- 撤销和重做如何在崩溃后恢复一致状态?
- 缓冲管理策略(窃取/强制)如何确定日志记录要求?
- 检查点在限制恢复时间方面扮演什么角色?
- ARIES算法如何将恢复分为分析、重做和撤销阶段?
Key concepts
- 预写式日志(WAL)
- 撤销和重做日志记录
- 日志序列号
- 检查点
- 窃取/不窃取和强制/不强制策略
- 补偿日志记录
- 分析、重做、撤销阶段
- ARIES
Key theories
- 预写式日志
- WAL协议要求描述更改的日志记录在相应的数据页之前被强制写入稳定存储,确保在崩溃后系统有足够的信息来撤销未提交的更改并重做已提交的更改。
- 撤销/重做恢复和缓冲策略
- 系统是否需要撤销、重做或两者兼有取决于缓冲策略:窃取策略(将未提交的页面写入磁盘)需要撤销,而不强制策略(在提交时不强制写入已提交的页面)需要重做;常见的窃取/不强制组合需要两者。
- ARIES
- ARIES是广泛采用的恢复方法,它使用预写式日志、日志序列号和三阶段(分析、重做、撤销)算法,并结合补偿日志记录来支持细粒度锁定和部分回滚。
Clinical relevance
恢复和日志记录是使持久性成为现实的关键:它们确保一旦系统确认了支付或订单等事务,该事实在断电和崩溃后仍然存在,并且事务进行到一半时的崩溃绝不会使数据库处于半更新、不一致的状态。
History
Härder和Reuter于1983年的调查阐述了面向事务的恢复原则和缓冲策略分类。ARIES由C. Mohan及其在IBM的同事开发,并于1992年发表,成为事实上的标准恢复算法,它将预写式日志与日志序列号和补偿记录相结合,以支持细粒度锁定。
Key figures
- C. Mohan
- Jim Gray
- Theo Härder
- Andreas Reuter
Related topics
Seminal works
- mohan1992
- haerder1983
- gray1992
Frequently asked questions
- 为什么预写式日志是必要的?
- 因为数据库可能会在事务提交之前将修改过的页面写入磁盘,或者在崩溃时将已提交的页面保留在内存中。在数据页之前强制写入日志记录,可以保证无论缓冲管理器做了什么,恢复都有足够的信息来撤销未提交的更改并重做已提交的更改,以达到一致状态。
- 检查点有什么作用?
- 检查点定期记录哪些事务是活动的,并将簿记信息刷新到日志中,为恢复提供一个最近的、已知良好的起点。如果没有检查点,恢复可能需要从头开始扫描整个日志;检查点限制了恢复必须处理的时间范围,使重启时间可控。