
一、Redo Log重做日志重做日志记录的是事务提交时数据页的物理修改是用来实现事务的持久性。该日志文件由两部分组成重做日志缓冲redo log buffer以及重做日志文件redo log file前者是在内存中后者在磁盘中。当事务提交之后会把所有修改信息都存到该日志文件中用于在刷新脏页到磁盘发生错误时进行数据恢复使用。为什么需要 Redo Log没有 redo log 的情况下事务提交↓把 Buffer Pool 中修改的数据页随机写到磁盘 .ibd 文件↓问题一个事务可能修改多个数据页这些页在磁盘上分散存放↓产生大量【随机写】→ 极慢 → 数据库吞吐量暴跌两个致命问题慢数据页是随机写磁头来回寻道吞吐量暴跌。丢如果提交时刷盘失败或断电数据无法恢复。用 Redo Log顺序写的情况下事务提交↓只把改了啥追加写到 redo log顺序写快↓数据页先放内存后台慢慢刷盘↓若崩溃 → 用 redo log 重做数据不丢价值说明提速顺序写替代随机写提交响应快随机 IO 被后台合并持久化提交时把修改记录顺序写入磁盘WAL只要日志在就能重做出数据二、Undo Log回滚日志Undo Log 记录的是数据被修改前的旧值逻辑日志当事务需要回滚时用它把数据恢复到修改前的状态。修改前余额 100↓ UPDATE修改后余额 200↓ 记录 undo logundo log余额 100旧值记录的是反向操作旧值用于撤销。与 Redo Log 相反Redo 记新值重做Undo 记旧值撤销。三、Redo Log 和 Undo Log 的区别维度Redo Log重做日志Undo Log回滚日志记录内容记录的是数据页的物理变化记录的是逻辑日志核心作用服务宕机时用来同步数据崩溃恢复当事务回滚时通过逆操作恢复原来的数据保证特性保证了事务的持久性D保证了事务的原子性A和一致性C通俗理解数据坏了/丢了靠它重做回来数据改错了靠它撤销回去