温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

何时会触发WAL日志写入

发布时间:2026-10-18 06:09:10 来源:亿速云 阅读:94 作者:小樊 栏目:数据库

WAL(Write-Ahead Logging,预写日志)是数据库中保证**持久性(Durability)和崩溃恢复(Crash Recovery)**的核心机制。其核心原则是:对数据的任何修改,必须先写入日志并落盘,才能修改内存/磁盘中的数据页。

下面以 PostgreSQL 为主(同时补充通用数据库和 MySQL/InnoDB 对比),说明何时会触发 WAL 日志写入。


一、PostgreSQL 中触发 WAL 写入的场景

1. 事务提交(最常见)

COMMIT;
  • 事务中所有修改生成 WAL 记录
  • 提交时必须将 WAL 刷盘(取决于 synchronous_commit)
  • 这是最典型的 WAL 写入触发点

2. 数据被修改(INSERT / UPDATE / DELETE)

  • 每次行级修改都会:
    • 生成 WAL 记录(如 Heap Insert / Update)
    • 写入 WAL Buffer
  • 是否落盘取决于提交或后台刷写

3. WAL Buffer 写满

  • wal_buffers(默认 16MB 左右)
  • 当 WAL buffer 满时:
    • 触发 WAL 写入操作系统缓存或磁盘

4. 后台 WAL Writer 定时刷写

  • wal_writer_delay(默认 200ms)
  • WAL writer 进程定期将 WAL buffer 写入磁盘

5. Checkpoint 发生

  • 触发条件:
    • 达到 checkpoint_timeout
    • 达到 max_wal_size
  • Checkpoint 前必须:
    • 将相关 WAL 刷盘
    • 保证恢复点一致性

6. 某些 DDL 操作

  • CREATE TABLE
  • ALTER TABLE
  • TRUNCATE
  • 都会写 WAL(元数据变更)

7. 复制相关

  • 物理/逻辑复制
  • 主库 WAL 被消费或发送到 standby

二、WAL 写入 ≠ WAL 落盘(重要区别)

动作 是否写 WAL
修改内存页 生成 WAL
写 WAL buffer ✅
写 OS cache ✅
刷到磁盘 (fsync) 取决于配置

synchronous_commit 的影响

  • on(默认):提交即落盘
  • off:可能延迟落盘(性能高,风险大)

三、MySQL / InnoDB 的类似机制(Redo Log)

虽然叫 redo log,本质也是 WAL:

触发写入:

  • 事务提交
  • redo log buffer 满
  • 后台线程每秒刷写
  • Checkpoint

四、一句话总结

只要数据库要“保证修改不丢”,就会触发 WAL 写入;提交、修改、Checkpoint、buffer 满、定时刷写是最常见触发点。

如果你关心的是 某一数据库(PG / MySQL / Oracle) 或 性能调优 / 丢失数据风险,可以继续问。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手