WAL(Write-Ahead Logging,预写日志)是数据库和存储系统中用来保证数据持久性和崩溃恢复能力的核心机制。
下面从“是什么、为什么、怎么工作、恢复过程”几个角度说明。
在任何数据页(Data Page)被修改并写入磁盘之前,必须先把这次修改记录到日志中,并且日志要先于数据落盘。
一句话总结:
先写日志,再改数据。
如果没有 WAL,直接修改磁盘上的数据页,会出现问题:
WAL 的好处:
通常包含:
以一次 UPDATE 为例:
BEGIN TRANSACTION
在数据页落盘前:
[LSN=101] TxID=7 UPDATE row=5 old=10 new=20
COMMIT
Commit 日志记录系统重启时,WAL 用于恢复:
如果一直不清理 WAL:
Checkpoint(检查点):
WAL 通过“先记日志、后改数据”的方式,用顺序写换取了崩溃安全和高性能。
如果你愿意,我也可以用一张流程图或PostgreSQL / InnoDB 的具体例子来进一步说明。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。