在数据库领域,WAL(Write-Ahead Logging) 和 Redo 日志 经常被一起提到,但它们并不是完全对等的概念,层次和含义不同。下面从定义、关系、区别几个角度说明。
WAL 是一种设计思想 / 机制:
在修改数据页之前,必须先把修改操作记录到日志中,并且日志要先行落盘(或至少优先于数据页落盘)。
核心原则:
WAL 不规定日志的具体内容格式,只规定“顺序”。
Redo 日志是日志的一种具体类型:
记录“对数据的物理或逻辑修改”,用于崩溃恢复时重做已提交但未落盘的操作。
例如:
可以这样理解:
WAL 是“规则”
Redo 日志是“遵守该规则写出的内容之一”
示意:
WAL 机制
├── Redo Log(最常见)
├── Undo Log(某些实现也走 WAL)
└── 其他日志(如逻辑日志、Binlog 在某些场景下)
| 对比维度 | WAL | Redo 日志 |
|---|---|---|
| 本质 | 机制 / 协议 | 日志内容类型 |
| 关注点 | 写顺序与持久性 | 记录“做了什么修改” |
| 是否一定存在 | 是(现代数据库基本都有) | 是(在 WAL 实现中通常都有) |
| 是否包含 Undo | 否(WAL 本身不包含) | 否(Redo 只重做) |
| 典型用途 | 保证 ACID 中的 D | 崩溃恢复 |
ib_logfile0/1 中记录页修改❌ “WAL 就是 redo 日志”
✅ WAL 是机制,redo 是其中一种日志
❌ “没有 redo 就不是 WAL”
✅ 理论上 WAL 也可用于其他日志类型
❌ “Binlog 是 redo”
✅ Binlog 是逻辑日志,通常不属于 redo(MySQL 中 redo 在引擎层)
WAL 决定“怎么写”,Redo 日志决定“写什么”。
如果你愿意,我也可以从 PostgreSQL / MySQL / Oracle 的具体实现对比来讲,会更直观。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。