MST

星途 面试题库

面试题:分布式系统中基于ACID的数据库事务日志管理机制之故障恢复

在分布式系统里,基于ACID的数据库事务日志对于故障恢复至关重要。请阐述一下当系统发生崩溃后,如何利用事务日志实现已提交事务的重做(Redo)和未提交事务的回滚(Undo)操作,以及这两个操作的具体流程和原理是什么?
47.4万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

重做(Redo)操作

  1. 原理:已提交事务对数据的修改在崩溃前可能还未完全持久化到数据库中。重做操作通过重新应用事务日志中已提交事务的记录,将这些修改重新应用到数据库,确保已提交事务的持久性。
  2. 流程
    • 从日志文件末尾开始向前扫描日志记录。
    • 对于每一条日志记录,检查其事务状态是否为已提交(通常通过事务的提交记录标识)。
    • 如果是已提交事务的记录,根据日志记录中的操作(如对某个数据项的更新值),重新执行这些操作,将数据恢复到崩溃前已提交事务完成后的状态。

回滚(Undo)操作

  1. 原理:未提交事务在系统崩溃时,其对数据的修改不应该被持久化。回滚操作通过反向应用事务日志中未提交事务的记录,将数据恢复到事务开始前的状态,保证事务的原子性。
  2. 流程
    • 从日志文件末尾开始向前扫描日志记录。
    • 对于每一条日志记录,检查其事务状态是否为未提交(没有事务的提交记录标识)。
    • 如果是未提交事务的记录,根据日志记录中的操作进行反向操作(例如,如果是更新操作,就将数据恢复为更新前的值,通常日志记录中会保存旧值)。这个过程持续进行,直到事务的开始记录,从而将未提交事务对数据的修改全部撤销。