跳转到主要内容

max_wal_size

max_wal_size:设置触发自动检查点的 WAL 大小。实测在档范围为 PG9.5–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 1 GiB,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置触发自动检查点的 WAL 大小。

身份

类型 , integer
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 , MB
原始单位
范围 , 22147483647
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Checkpoints
上游分类
最后 boot 值 , 1024
1 GiB

生命周期

Fact
首次观测 PG9.5
在档版本 PG9.5–19 Beta 3
移除版本
引入提交 88e982302684 — Replace checkpoint_segments with min_wal_size and max_wal_size.
提交日期 2015-02-23
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.5–9.6 64 16MB 1 GiB (64 × 16MB)
PG10–19 Beta 3 1024 MB 1 GiB

机制详解

检查点进程会在 checkpoint_timeout 到期或 WAL 即将超过 max_wal_size 时启动自动检查点,二者谁先发生就由谁触发。检查点越频繁,脏页被写回得越频繁,并且每次检查点之后产生的全页镜像也会更多。

max_wal_size 不是磁盘配额。高写入负载、恢复过程、归档变慢或失败、wal_keep_size 保留文件,以及复制槽仍需要旧 WAL 时,实际 pg_wal 都可能超过该值。

增大它通常能减少请求型检查点和检查点写入抖动,但会扩大崩溃后需要重放的 WAL 区间,也要求更多 pg_wal 余量。min_wal_size 只控制 WAL 文件回收的下限,并不会把 max_wal_size 变成硬上限。

调优建议

提示

Advice。 以下建议是工作负载起点,必须用真实测量验证。

场景 建议
OLTP 根据实测峰值 WAL 产生速率和可接受的检查点频率定值。持续观察 pg_stat_checkpointer、checkpoint_warning、写延迟、归档延迟与剩余空间;只有请求型检查点长期占主导时才有依据上调。
OLAP 批量导入和大型维护任务会突发产生 WAL,较大值可减少检查点风暴。必须同时确认 pg_wal 容量、归档吞吐以及更长的崩溃恢复窗口都可接受。
小规格 小磁盘应使用保守且有明确上限的值。复制槽保留量和归档积压要另算,并预留应急空间,不要把卷的大部分空间都分配给名义上的检查点阈值。

Pigsty 取值

以下值来自固定 8 核、32 GiB、100 GiB SSD 夹具,并按 PG19 Beta 3 渲染当前 Pigsty 模板;这不表示 Pigsty 当前支持该历史或测试版本。

模板 有效值 与上游 boot 比较 源表达式
OLTP 20GB 不同于 boot 值 {{ ([pg_size_twentieth * 4, 2000])|min }}GB
OLAP 20GB 不同于 boot 值 {{ ([pg_size_twentieth * 4, 2000])|min }}GB
CRIT 20GB 不同于 boot 值 {{ ([pg_size_twentieth * 4, 2000])|min }}GB
TINY 20GB 不同于 boot 值 {{ ([pg_size_twentieth * 4, 2000])|min }}GB
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.5–19 Beta 3 = 20GB (dcs);OLAP: PG9.5–19 Beta 3 = 20GB (dcs);CRIT: PG9.5–19 Beta 3 = 20GB (dcs);TINY: PG9.5–19 Beta 3 = 20GB (dcs)。 建议(待人工复核)——发布前应结合当前 Pigsty 模板及其实际支持的 PostgreSQL 版本确认运维意图。

常见坑

  • 误以为 max_wal_size 是 pg_wal 的硬上限。
  • 通过增大该值掩盖归档失败或废弃复制槽。
  • 下调前没有评估全页镜像量和检查点延迟。
  • 忽略无单位数字按 MB 解释。
  • 脱离 checkpoint_timeout 与 checkpoint_completion_target 单独调参。

min_wal_size · checkpoint_timeout · checkpoint_completion_target · checkpoint_warning · wal_keep_size · max_slot_wal_keep_size

参考资料