选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / 配置参数 / 预写式日志

CONFIGURATION PARAMETER预写式日志 / 设置

wal_recycle

通过重命名复用 WAL 文件。

Recycles WAL files by renaming them.

布尔 会话(超级用户) 引入 12 现存至 20 devel 0 次默认值变更

类型
布尔bool
上下文
会话(超级用户)超级用户可在会话内用 SET 修改
默认值
on
引入版本
12
状态
现存

PostgreSQL 18 手册 官方文档 引入提交 475861b261

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

on 12 – 20

默认值自 PostgreSQL 12 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。

手册说明

PostgreSQL 18 手册 · 19.5 预写式日志 本站手册 官方原文

本版译文与 PostgreSQL 12 完全一致,下面就是同一段文字。

如果设置为 on (默认值),此选项通过重命名来回收 WAL 文件,从而避免创建新文件。 在 COW 文件系统上,创建新文件系统可能更快,因此提供了禁用此行为的选项。

机制详解

通过重命名复用 WAL 文件。超级用户或获授 SET 权限的角色可在相应的会话或配置作用域中修改它。

它位于 WAL 生成、写出、检查点、归档与恢复链路中;实际效果还受 wal_level、检查点节奏、持久化设置与存储语义影响。只观察单一参数不足以证明耐久性或恢复能力。

应把 wal_recycle 与 wal_init_zero、wal_segment_size、min_wal_size 一起监控和变更。先在对应角色与真实负载上验证,再按其 superuser context 选择会话修改、reload 或 restart;历史默认值并不等于当前有效值。

调优建议

按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。

  • OLTP在线事务处理

    先保证耐久性与恢复目标,再以 WAL 生成速率、刷写延迟、检查点和 pg_wal 峰值调 wal_recycle;每次改动都做崩溃/恢复与归档监控验证。

  • OLAP分析与批处理

    按批量装载峰值规划 WAL、归档带宽和恢复 I/O;需要降低峰值时应协调装载节奏与检查点,而不是牺牲恢复链。

  • 小规格低配实例与开发机

    从安全默认开始,按有限磁盘容量设置明确告警;不要仅为节省少量 I/O 就关闭耐久性或破坏恢复链。

常见问题

  • 误以为在写时复制存储上,重命名复用一定比新分配更快。
  • 关闭复用前没有测量 WAL 突发期间的段创建延迟。
  • 期待会话修改改变已经复用或删除的文件。
  • 把文件复用策略误当成 WAL 保留上限。

演化历史

相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

  2. PostgreSQL 12 ← 11 新增此参数

    PostgreSQL 12 起可用

逐版本快照

每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。

版本 默认值单位上下文类型最小值最大值枚举值
12 on 会话(超级用户) 布尔
13 on 会话(超级用户) 布尔
14 on 会话(超级用户) 布尔
15 on 会话(超级用户) 布尔
16 on 会话(超级用户) 布尔
17 on 会话(超级用户) 布尔
18 on 会话(超级用户) 布尔
19 on 会话(超级用户) 布尔
20 沿用 on 会话(超级用户) 布尔

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Write-Ahead Log 预写式日志 15 个
设置 15
commit_delay 整数 会话(超级用户) 0 9.31 次
设置事务提交与将 WAL 刷入磁盘之间的延迟(微秒)。 现存
commit_siblings 整数 会话 5 9.11 次
设置启用 commit_delay 前所需的并发活动事务最低数量。 现存
fsync 布尔 重载生效 on
强制将更新同步到磁盘。 现存
full_page_writes 布尔 重载生效 on
检查点后页面首次修改时将完整页面写入 WAL。 现存
synchronous_commit 枚举 会话 on 9.63 次
设置当前事务提交时使用的同步级别。 现存
wal_buffers 整数 重启生效 -1 8kB 9.11 次
设置共享内存中用于 WAL 的磁盘页缓冲区数量。 现存
wal_compression 枚举 会话(超级用户) off 151 次
使用指定方法压缩写入 WAL 的整页映像。 现存
wal_init_zero 布尔 会话(超级用户) on
新 WAL 文件首次使用前先写零。 现存
wal_level 枚举 重启生效 replica 103 次
设置写入 WAL 的信息级别。 现存
wal_log_hints 布尔 重启生效 off
页面在检查点后首次发生非关键修改时也将完整页面写入 WAL。 现存
wal_recycle 布尔 会话(超级用户) on
通过重命名复用 WAL 文件。 现存
wal_skip_threshold 整数 会话 2 MiB
设置用 fsync 新文件代替写 WAL 的最小文件规模。 现存
wal_sync_method 枚举 重载生效 fdatasync
选择将 WAL 更新强制写入磁盘的方法。 现存
wal_writer_delay 整数 重载生效 200 ms
设置 WAL writer 两次刷写之间的时间。 现存
wal_writer_flush_after 整数 重载生效 1 MiB (128 × 8kB)
设置触发 WAL writer 刷盘的写出 WAL 数量。 现存