面试题答案
一键面试redo log在保证持久性方面的作用
- 崩溃恢复:当系统发生崩溃后重启时,redo log用于重做在崩溃前未完成的事务中已经提交的操作。它记录了数据库物理层面的修改操作,如某一页数据的修改。例如,在一个转账事务中,从账户A向账户B转账100元,修改账户A余额的物理记录会被写入redo log。当系统崩溃重启,通过redo log中的记录可以重新执行这些操作,确保已提交事务对数据的修改永久保存,从而保证持久性。
undo log在保证持久性方面的作用
- 回滚事务:undo log主要用于在事务执行过程中出现错误或用户主动回滚事务时,撤销尚未提交的事务对数据的修改。它记录了数据修改前的版本信息,以逻辑日志的形式存在。例如,在上述转账事务中,如果在事务未提交前发现账户A余额不足,此时可以利用undo log中的记录将账户A的余额恢复到初始状态,保证未提交事务不会对数据造成永久性影响,间接保证了持久性(即只有提交的事务才会对数据产生持久影响)。
redo log与undo log的主要区别
- 作用不同
- redo log:主要用于崩溃恢复,确保已提交事务的持久性。
- undo log:主要用于事务回滚,保证未提交事务不会对数据造成持久影响。
- 记录内容不同
- redo log:记录物理层面的修改操作,即数据页的修改。
- undo log:记录逻辑层面的修改操作,即数据修改前的版本信息。
- 写入时机不同
- redo log:在事务执行过程中不断写入,采用循环写的方式,空间使用完后会覆盖旧的日志。
- undo log:在事务开始时创建,随着事务的执行不断记录数据修改前的版本,在事务提交后,undo log并不会立即删除,而是等待事务的可见性不再需要时(如InnoDB中的purge操作)才删除。