恢复系统基础理论
恢复系统
恢复系统是事务管理的一部份
缓冲区管理
日志记录缓冲
三条规则
- 在日志记录
输出到稳定存储器后,事务Ti进入提交状态 - 在日志记录
输出到稳定存储器前,与事务Ti有关的所有日志记录必须已经输出到稳定存储器。 - 在主存中的数据块输出到数据库(非易失存储器)前,所有与该数据库中数据有关的日志记录必须已经输出到稳定存储器中。这一条规则称为先写日志规则。
数据库缓冲
强制与非强制策略(提交时是不是一定要写盘)
强制策略:提交时强制地将修改过的所有块都输出到磁盘中。
非强制策略:即使一个事务修改了某些还没有写回到磁盘的块,也允许它提交。
后者使得事务能更快地提交。大多数系统采用这种方法。
窃取与非窃取策略(没提交能不能写到盘里)
窃取策略:允许系统将修改过的块写到磁盘中,即使做这些修改的事务还没有全部提交。
非窃取策略:一个仍然活跃的事务修改过的块都不应该写出到磁盘中。
大多数系统采取窃取策略。
操作系统在缓冲区管理中的作用
两种方法管理数据库缓冲区:
- 数据库系统保留部分memory作为缓冲区自己管理,而非交给OS管理
- 数据库系统在OS提供的虚拟内存中实现其缓冲区
可能会导致额外的数据到磁盘的输出。
模糊检查点
允许checkpoint记录写入日志后,修改过的缓冲块写到磁盘前,开始做更新。
锁的提前释放和逻辑undo操作
与B+的撤回相关。
逻辑操作
插入和删除操作,需要逻辑undo操作,因为它们提前释放锁,称为逻辑操作。
操作在执行时需要获得低级别的锁,操作完成就释放锁;相应的事务必须按两阶段方式保持一个高级别的锁,以防止并发的事务在相同的键值上执行冲突的读、插入或者删除操作。提前释放锁使得第二次插入可以在同一页面上执行。
一旦释放了低级别的锁,就不能用更新的数据项的旧值来对旧值进行撤销,而必须通过执行一个补偿操作来撤销,这样的操作称为逻辑undo操作。