数据库的Undo日志与Redo日志
Undo日志
- 主要用来恢复到事务开始前的状态
- 更新前写入日志旧值
- commit之后,前面的日志还需要吗?
分情况
1.单线程 可以清理
2.多线程 需要等到所有并行线程提交后才能(检查点机制)
- 静态检查点
如果这个事务很长,那么必须等待这个事务执行完才能创建新的事务,这让用户感觉已经宕机了
- 动态检查点
Redo日志
- 用来重做事务,把事务恢复成事务完成之后的新值
- 类似于WAL 先写日志后写数据 写日志成功后 才开始写数据
如果在事务提交之前发生故障,那么所有操作忽略,如果事务在提交之后发生故障,那么需要重做每条日志
- 动态检查点
对比
undo/redo(二合一)日志
- 类似WAL,写入数据前必须先写日志进磁盘
在commit之前宕机,就回滚,在commit之后宕机就重做