WAL(Write-Ahead Logging,预写日志) 是数据库系统中用来保证原子性和持久性的一种核心机制。它的核心思想可以概括为一句话:
在修改数据之前,必须先把“要做的修改”记录到日志里,并且日志要先于数据落盘。
下面从原理、流程和关键点逐步说明。
数据库数据通常放在磁盘上的数据页中,直接写磁盘有两点问题:
WAL 通过“先写日志、后写数据”的方式解决这两个问题:
以一次更新操作为例:
BEGIN;
UPDATE account SET balance = balance - 100 WHERE id = 1;
在内存中生成一条 WAL 记录,例如:
LSN=102
事务ID=TX1
表空间/页号/偏移
旧值: 1000
新值: 900
✅ 这就是 “Write-Ahead”:数据页还没改,日志已经安全了
假设数据库崩溃后重启:
WAL 的原则是:任何数据修改,先写日志、后改数据;日志安全,数据才能安全。
这也是 MySQL(InnoDB Redo Log)、PostgreSQL、SQLite、HBase 等系统共同依赖的底层机制。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。