WAL(Write-Ahead Logging,预写日志)是数据库中保证**持久性(Durability)和崩溃恢复(Crash Recovery)**的核心机制。其核心原则是:对数据的任何修改,必须先写入日志并落盘,才能修改内存/磁盘中的数据页。
下面以 PostgreSQL 为主(同时补充通用数据库和 MySQL/InnoDB 对比),说明何时会触发 WAL 日志写入。
COMMIT;
synchronous_commit)wal_buffers(默认 16MB 左右)wal_writer_delay(默认 200ms)checkpoint_timeoutmax_wal_sizeCREATE TABLEALTER TABLETRUNCATE| 动作 | 是否写 WAL |
|---|---|
| 修改内存页 | 生成 WAL |
| 写 WAL buffer | ✅ |
| 写 OS cache | ✅ |
| 刷到磁盘 (fsync) | 取决于配置 |
synchronous_commit 的影响on(默认):提交即落盘off:可能延迟落盘(性能高,风险大)虽然叫 redo log,本质也是 WAL:
触发写入:
只要数据库要“保证修改不丢”,就会触发 WAL 写入;提交、修改、Checkpoint、buffer 满、定时刷写是最常见触发点。
如果你关心的是 某一数据库(PG / MySQL / Oracle) 或 性能调优 / 丢失数据风险,可以继续问。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。