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

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

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

CONFIGURATION PARAMETER预写式日志 / 设置

wal_compression

使用指定方法压缩写入 WAL 的整页映像。

Compresses full-page writes written in WAL file with specified method.

枚举 会话(超级用户) 引入 9.5 现存至 20 devel 0 次默认值变更

类型
枚举enum
上下文
会话(超级用户)超级用户可在会话内用 SET 修改
默认值
off
枚举值
pglz, lz4, zstd, on, off
引入版本
9.5
状态
现存

PostgreSQL 18 手册 官方文档 引入提交 57aa5b2bb1

版本轨迹

相对 PostgreSQL 17 无变化。

默认值变迁

off 9.5 – 20

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

手册说明

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

此参数启用使用指定的压缩方法对WAL进行压缩。 启用后,PostgreSQL服务器在 full_page_writes打开时或在基本备份期间, 压缩写入WAL的整页镜像。 在WAL重放期间,将对压缩的页镜像进行解压缩。 支持的方法有pglzlz4(如果PostgreSQL 使用--with-lz4编译)和 zstd(如果PostgreSQL 使用--with-zstd编译)。 值 onpglz 的历史拼写。 默认值为off。 只有超级用户和具有适当SET权限的用户才能更改此设置。

启用压缩可以减少WAL卷的大小,而不会增加不可恢复的数据损坏的风险, 但会增加在WAL记录期间进行压缩时的额外CPU消耗,以及在WAL重放期间进行解压缩时的成本。

机制详解

使用指定方法压缩写入 WAL 的整页映像。超级用户或获授 SET 权限的角色可在相应的会话或配置作用域中修改它。

压缩对象是 full_page_writes、备份或 hint logging 产生的整页映像,而非每条 WAL 记录。pglz 内置,lz4/zstd 取决于构建;它用主库压缩和备库解压 CPU 换取更小 WAL。

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

调优建议

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

  • OLTP在线事务处理

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

  • OLAP分析与批处理

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

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

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

常见问题

  • 误以为压缩作用于每条 WAL,而不是整页映像。
  • 服务器构建未提供相应方法时选择 lz4 或 zstd。
  • 忽略主库压缩 CPU 与恢复重放解压 CPU。
  • 修改特权会话值后,误以为其他会话或新连接会自动继承。
  • 未控制检查点频率与 full_page_writes 活动就比较 WAL 字节量。

演化历史

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

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

  2. PostgreSQL 15 ← 14 属性变更

    类型 布尔 枚举 枚举值 (无) pglz, lz4, zstd, on, off 简述 Compresses full-page writes written in WAL file. Compresses full-page writes written in WAL file with specified method.

  3. PostgreSQL 9.5 ← 9.4 新增此参数

    PostgreSQL 9.5 起可用

逐版本快照

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

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

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
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 数量。 现存