Skip to content

undolog与redolog

一、基础背景

1. 缓冲池(Buffer Pool)

主内存中的一个区域,用于缓存磁盘上频繁操作的数据。增删改查操作优先操作缓冲池数据,再以一定频率刷新到磁盘,减少磁盘IO,提升处理速度。

2. 数据页(Page)

InnoDB存储引擎磁盘管理的最小单元,默认大小为16KB,用于存储行数据。


二、Redo Log(重做日志)

1. 定义

重做日志,记录事务提交时数据页的物理修改,是实现事务持久性的核心机制。

2. 组成与流程

  • 由内存中的redo log buffer和磁盘上的redo log file(如ib_logfile0/1)组成。
  • 事务提交时,将数据修改信息写入redo log buffer,再刷入磁盘的redo log文件。
  • 基于WAL(Write-Ahead Logging)机制,日志优先写入磁盘,确保数据持久化。

3. 核心作用

  • 实现事务的持久性:事务提交后,即使数据库崩溃,也能通过redo log恢复数据修改。
  • 用于刷新脏页到磁盘发生错误时的数据恢复。

三、Undo Log(回滚日志)

1. 定义

回滚日志,记录数据被修改前的信息,属于逻辑日志。

2. 核心作用

  1. 事务回滚:记录数据修改前的逆操作,事务回滚时可通过undo log恢复数据。
    • 删除记录时,记录对应的insert操作;修改记录时,记录对应的反向update操作。
  2. MVCC(多版本并发控制):通过保存数据的历史版本,实现事务间的快照读,解决并发读一致性问题。

3. 事务特性支持

保证事务的原子性和一致性。


四、Undo Log与Redo Log的核心区别

对比维度Redo LogUndo Log
日志类型物理日志(记录数据页的物理变化)逻辑日志(记录数据修改前的逻辑逆操作)
核心作用实现事务的持久性,崩溃后数据恢复实现事务回滚和MVCC,保证原子性与一致性
写入时机事务提交时写入事务执行过程中写入
数据恢复方式重放日志中记录的物理修改执行日志中记录的逆操作恢复数据
存储位置磁盘上的redo log文件(如ib_logfile0/1)存储在系统表空间或独立undo表空间中

面试相关问题

  1. 问:Redo Log和Undo Log的区别是什么? 答:Redo Log是物理日志,记录数据页的物理变化,实现事务的持久性;Undo Log是逻辑日志,记录数据修改前的逆操作,实现事务回滚和MVCC,保证原子性与一致性。

  2. 问:Redo Log的作用是什么?如何实现的? 答:Redo Log用于实现事务的持久性,事务提交时将数据修改写入redo log buffer并刷入磁盘,崩溃后通过重放日志恢复数据修改,基于WAL机制实现。

  3. 问:Undo Log的作用是什么?如何实现事务回滚? 答:Undo Log用于事务回滚和MVCC,事务执行时记录数据修改前的逆操作(如删除对应insert、修改对应反向update),回滚时执行这些逆操作恢复数据。

  4. 问:为什么需要Redo Log?直接刷新数据页到磁盘不行吗? 答:直接刷新数据页到磁盘IO开销大且效率低,Redo Log通过顺序写入日志文件,IO开销小,且能在崩溃后恢复数据,保证事务持久性。

  5. 问:Undo Log和Redo Log如何配合保证事务ACID特性? 答:Undo Log保证原子性和一致性(事务回滚),Redo Log保证持久性,隔离性由事务隔离级别实现,两者配合确保事务ACID特性完整实现。

Powered by VitePress 1.6.4 | 持续更新中