利用日志文件恢复主要有两个问题:

    • 日志扫描过程太耗时。因为日志文件必须保存在磁盘中,而且随着时间的不断推进,日志文件在不断扩大,扫描的时间也就变得越来越长。
    • 许多要求REDO事务的更新,实际上在恢复时都写入了磁盘的物理数据库中。尽管对它们做REDO操作不会造成不良后果,但会使恢复过程变得更长,导致数据库系统停止服务延长,从而降低了数据库的可用性。为了减少扫描开销和提高恢复效率,引入了检查点技术。

    什么是检查点技术:

    • 检查点是周期性地向日志中写一条检查点记录,记录所有当前活跃的事务,为恢复管理器提供信息,以决定从日志的何处开始恢复。
    • 检查点工作主要包括:
      • 将当前位于日志缓冲区的所有日志记录输出到磁盘上;
      • 将当前位于数据缓冲区的所有更新数据块输出到磁盘上;
      • 记录日志记录并输出到磁盘上,其中L是做检查点时活跃事务的列表。

    静态检查点技术:

    • 在检查点执行过程中,不允许事务执行任何更新动作,如写缓冲块或写日志记录,称其为静态检查点技术。
    • 如果事务T在做检查点之前就已提交,那么它的记录一定出现在记录之前,并且其更新操作在做checkpoint时都已写到磁盘中,因此不需要对事务T做任何恢复操作,这样可大大减少恢复工作量。

    image.png
    事务T1:T1类事务在tc检查点之前就结束了,其更新操作在做检查点之前已经写到磁盘上,故不用做任何恢复操作。
    事务T2:T2类事务在tc检查点之前的更新操作已写到磁盘上,故重做时只需根据tc之后的日志记录进行REDO即可。
    事务T4:T4类事务在tc检查点之后开始,且在故障发生之前就已经结束,因此需要全部重做。
    事务T3、T5:这两类事务在故障发生时还没有结束,因此需要全部撤销。

    image.png
    image.png
    image.png
    image.png