MST

星途 面试题库

面试题:分布式系统中redo log与undo log在ACID持久性方面的作用及区别

在分布式后端开发的系统里,ACID的持久性至关重要。请阐述redo log与undo log在保证持久性方面分别起到什么作用,它们之间又有哪些主要区别?
17.4万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

redo log在保证持久性方面的作用

  1. 崩溃恢复:当系统发生崩溃后重启时,redo log用于重做在崩溃前未完成的事务中已经提交的操作。它记录了数据库物理层面的修改操作,如某一页数据的修改。例如,在一个转账事务中,从账户A向账户B转账100元,修改账户A余额的物理记录会被写入redo log。当系统崩溃重启,通过redo log中的记录可以重新执行这些操作,确保已提交事务对数据的修改永久保存,从而保证持久性。

undo log在保证持久性方面的作用

  1. 回滚事务:undo log主要用于在事务执行过程中出现错误或用户主动回滚事务时,撤销尚未提交的事务对数据的修改。它记录了数据修改前的版本信息,以逻辑日志的形式存在。例如,在上述转账事务中,如果在事务未提交前发现账户A余额不足,此时可以利用undo log中的记录将账户A的余额恢复到初始状态,保证未提交事务不会对数据造成永久性影响,间接保证了持久性(即只有提交的事务才会对数据产生持久影响)。

redo log与undo log的主要区别

  1. 作用不同
    • redo log:主要用于崩溃恢复,确保已提交事务的持久性。
    • undo log:主要用于事务回滚,保证未提交事务不会对数据造成持久影响。
  2. 记录内容不同
    • redo log:记录物理层面的修改操作,即数据页的修改。
    • undo log:记录逻辑层面的修改操作,即数据修改前的版本信息。
  3. 写入时机不同
    • redo log:在事务执行过程中不断写入,采用循环写的方式,空间使用完后会覆盖旧的日志。
    • undo log:在事务开始时创建,随着事务的执行不断记录数据修改前的版本,在事务提交后,undo log并不会立即删除,而是等待事务的可见性不再需要时(如InnoDB中的purge操作)才删除。