PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

28.3. 预写式日志 #

预写式日志(Write-Ahead Logging,简称 WAL)是保障事务型数据库数据完整性的核心工业标准设计。其中心思想极其纯粹:对数据文件(存放数据表与索引的文件)所做的任何修改,必须严格在描述该修改的 WAL 日志记录被持久化刷入非易失介质之后,才被允许真正写入数据文件本身。严格遵循这一规范,使得数据库系统在每次事务提交时完全无需耗时地将整个 8KB 数据脏页刷盘,因为一旦发生宕机崩溃,系统完全可以通过日志回放(REDO 重做)将所有未落盘的内存脏数据精确无误地完整恢复出来。

引入 WAL 机制使磁盘物理写入开销大幅降低:事务提交时只需将高度紧凑的单条 WAL 日志按顺序追加写入磁盘即可宣告提交成功,无需在磁盘各个分散的数据文件中随机寻道刷写脏数据页。WAL 的顺序写性能远高于离散的数据页随机写。特别是在处理海量高并发小事务时,单次 WAL 日志刷盘(fsync)往往可以批量打包协同提交数十乃至数百个并发事务(组提交机制)。

此外,WAL 也是实现持续物理归档与基于时间点精准恢复(Point-in-Time Recovery,简称 PITR)的底层技术支柱。结合全量物理基础备份与连续归档的 WAL 增量日志,允许将数据库状态精确回滚恢复至历史时间轴上被日志覆盖的任意微秒瞬间。