简短结论:WAL(Write-Ahead Logging,预写日志)本身通常不是为了“直接提升写性能”,而是为了保证“持久性 + 崩溃恢复”的前提下,尽量避免随机写、把随机写变成顺序写,从而在很多场景下“间接提升整体性能”。
下面分点说清楚。
WAL 的基本规则是:
在修改数据页之前,必须先把修改记录写到日志里,并且日志要先落盘(或至少写入稳定存储)
它的首要目标是:
所以:没有 WAL,你可能更快,但一崩溃就完蛋。
关键在于:磁盘的随机写很慢,顺序写快很多
每次更新都直接写数据文件:
也就是:
把“随机写数据”变成“顺序写日志 + 异步刷脏页”
这在很多系统中是巨大性能提升。
不是白嫖性能,代价包括:
如果:
那 WAL 可能反而拖慢你。
如果你愿意,我可以结合 MySQL / PG / RocksDB 某一个具体系统,画一张“有无 WAL 的 IO 对比图”来解释。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。