数据库的Undo日志与Redo日志

Undo日志

  • 主要用来恢复到事务开始前的状态
  • 更新前写入日志旧值
  • commit之后,前面的日志还需要吗?
    分情况
    1.单线程 可以清理
    2.多线程 需要等到所有并行线程提交后才能(检查点机制)
  • 静态检查点

    如果这个事务很长,那么必须等待这个事务执行完才能创建新的事务,这让用户感觉已经宕机了
  • 动态检查点

Redo日志

  • 用来重做事务,把事务恢复成事务完成之后的新值
  • 类似于WAL 先写日志后写数据 写日志成功后 才开始写数据

    如果在事务提交之前发生故障,那么所有操作忽略,如果事务在提交之后发生故障,那么需要重做每条日志
  • 动态检查点

对比

undo/redo(二合一)日志

  • 类似WAL,写入数据前必须先写日志进磁盘

    在commit之前宕机,就回滚,在commit之后宕机就重做
posted @ 2022-11-30 16:03  misaka-mikoto  阅读(76)  评论(0编辑  收藏  举报