中间件速查手册
关系型数据库Write-Ahead Logging

WAL 模式 是什么?

写操作先追加到 -wal 文件,读不受写阻塞

类比:先在便签上记账,之后再合并进正式账本

默认模式的问题

默认的 rollback journal 模式下,写事务会锁住整个数据库,读操作要等写完成。单机小工具无所谓,稍微有点并发就会看到 `database is locked`。

WAL 怎么改善

开启后(`PRAGMA journal_mode=WAL;`),写操作追加到 -wal 文件,读连接继续读主文件里的旧数据,读写互不阻塞。多个读 + 一个写可以真正并发。

代价是多两个文件(-wal、-shm),并且 WAL 需要定期 checkpoint 合并回主文件。

实践建议

几乎所有的服务端 / 桌面应用都该开 WAL。配合 `PRAGMA synchronous=NORMAL` 能显著提升写吞吐(崩溃可能丢最后几条事务,但不会损坏数据库)。批量写入一定包事务,否则每条都是一次 fsync。

它出现在这些中间件里

相关问题

相关概念