前言
这两事务日志用来保证事务原子性、持久性的,undo log(回滚日志)提供回滚操作,保证原子性,redo log(重做日志)提供前滚操作,保证持久性。
先聊聊undo log
什么时候会用到undo log回滚?
- 用户调用ROLLBACK主动回滚
- 事务出错
- 辅助redo log实现事务持久性
undo log如何保证原子性?
数据修改前,undo log会备份保存修改前的数据记录,然后把undo log写磁盘,数据修改并写磁盘,然后事务提交。如下有A=1、B=2两数据
A.事务开始.
B.记录A=1到undo log.
C.修改A=3.
D.记录B=2到undo log.
E.修改B=4.
F.将undo log写到磁盘。
G.将数据写到磁盘。
H.事务提交
所谓的原子性是事务中系列操作要么都执行成功,要么都失败回滚。看上面这个过程,如果G、H间系统出现故障,根据磁盘中undo log回滚到原始状态;如果A-F间出现故障 ,因为数据还没有更新持久化到磁盘,自然是原始状态。(这里面也有隐含的持久性意思)
缺点?
数据和undo log都会写磁盘,无疑增加了磁盘I/O次数,降低了性能。
再聊聊redo log
上文的undo log隐含中有实现持久性的意思,但