跳转到主要内容

1 - archive_cleanup_command

archive_cleanup_command:设置每次重启点执行的 shell 命令。它是 PG12–18 的 sighup 参数;最新实测启动默认值为 empty。
说明

Fact — 官方简述译文:设置每次重启点执行的 shell 命令。

身份

类型 , string
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Archive Recovery
上游分类
最后 boot 值 , ""
empty string

生命周期

Fact
首次观测 PG12
在档版本 PG12–19 Beta 3
移除版本
引入提交 2dedf4d9a899 — Integrate recovery.conf into postgresql.conf
提交日期 2018-11-25
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG12–19 Beta 3 "" empty string

机制详解

设置每次重启点执行的 shell 命令。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

归档恢复的每个 restartpoint 都会执行该命令,并把 %r 展开为保持恢复可重新启动所需的最早 WAL 文件。通常使用 pg_archivecleanup;若多个备库共享归档,贸然删除可能让其他消费者断链。

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

调优建议

提示

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

场景 建议
OLTP 把 archive_cleanup_command 作为备份/恢复协议的一部分管理:命令或模块必须幂等、失败可见,并通过从真实归档恢复来验证,而不是只看返回码。
OLAP 按批量装载 WAL 峰值配置归档吞吐与容量;归档跟不上时节流任务并报警,不能用虚假成功或激进清理掩盖积压。
小规格 有明确 PITR 需求才启用并交给成熟备份工具;可重建实例保持简单,但不要留下占位命令制造“已备份”的错觉。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG12–19 Beta 3 未修改;OLAP: PG12–19 Beta 3 未修改;CRIT: PG12–19 Beta 3 未修改;TINY: PG12–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 对其他备库或恢复任务共享的归档执行破坏性清理。
  • 把 %r 误读为最后重放文件;它表示保持恢复可重新启动所需的最早文件。
  • restartpoint 重复或归档文件已不存在时,命令不具备幂等性。
  • 误以为 reload 会立即执行命令;它只在恢复 restartpoint 运行。
  • shell 引用或异常归档路径使清理越过预期归档目录。

archive_mode · archive_command · archive_library · archive_timeout · restore_command · recovery_end_command

参考资料

2 - archive_command

archive_command:设置归档 WAL 文件时调用的 shell 命令。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 empty string,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置归档 WAL 文件时调用的 shell 命令。

身份

类型 , string
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Archiving
上游分类
最后 boot 值 , ""
empty string

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 "" empty string

机制详解

设置归档 WAL 文件时调用的 shell 命令。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

归档进程把 %p 展开为源路径、%f 展开为 WAL 文件名,并把退出码 0 当作持久成功;非零会重试。虚假成功会允许 PostgreSQL 回收唯一的本地副本,悄然破坏归档链。

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

调优建议

提示

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

场景 建议
OLTP 把 archive_command 作为备份/恢复协议的一部分管理:命令或模块必须幂等、失败可见,并通过从真实归档恢复来验证,而不是只看返回码。
OLAP 按批量装载 WAL 峰值配置归档吞吐与容量;归档跟不上时节流任务并报警,不能用虚假成功或激进清理掩盖积压。
小规格 有明确 PITR 需求才启用并交给成熟备份工具;可重建实例保持简单,但不要留下占位命令制造“已备份”的错觉。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP pgbackrest --stanza=fixture archive-push %p 不同于 boot 值 'pgbackrest --stanza={{ pg_cluster }} archive-push %p'
OLAP pgbackrest --stanza=fixture archive-push %p 不同于 boot 值 'pgbackrest --stanza={{ pg_cluster }} archive-push %p'
CRIT pgbackrest --stanza=fixture archive-push %p 不同于 boot 值 'pgbackrest --stanza={{ pg_cluster }} archive-push %p'
TINY pgbackrest --stanza=fixture archive-push %p 不同于 boot 值 'pgbackrest --stanza={{ pg_cluster }} archive-push %p'
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = pgbackrest –stanza=fixture archive-push %p (dcs);OLAP: PG9.0–19 Beta 3 = pgbackrest –stanza=fixture archive-push %p (dcs);CRIT: PG9.0–19 Beta 3 = pgbackrest –stanza=fixture archive-push %p (dcs);TINY: PG9.0–19 Beta 3 = pgbackrest –stanza=fixture archive-push %p (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在把归档绑定到 Pigsty 用于 PITR 的 pgBackRest stanza;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 归档副本尚未持久化或校验就返回成功。
  • shell 命令没有安全引用 %p/%f。
  • 反复失败写满 pg_wal 并使服务器停摆。
  • 混淆 pg_settings 的原始单位与配置文件可读单位。
  • 只做吞吐基准,不做崩溃恢复与归档还原。

archive_mode · archive_library · archive_timeout · archive_cleanup_command · restore_command · recovery_end_command

参考资料

3 - archive_library

archive_library:设置归档 WAL 文件时调用的库。它是 PG15–18 的 sighup 参数;最新实测启动默认值为 empty。
说明

Fact — 官方简述译文:设置归档 WAL 文件时调用的库。

身份

类型 , string
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Archiving
上游分类
最后 boot 值 , ""
empty string

生命周期

Fact
首次观测 PG15
在档版本 PG15–19 Beta 3
移除版本
引入提交 5ef1eefd76f4 — Allow archiving via loadable modules.
提交日期 2022-02-03
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG15–19 Beta 3 "" empty string

机制详解

设置归档 WAL 文件时调用的库。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

非空值通过 _PG_archive_module_init 回调选择归档模块,取代 shell 命令。archive_command 与 archive_library 是二选一实现;二者可重载,但 archive_mode 必须已经启用。

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

调优建议

提示

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

场景 建议
OLTP 把 archive_library 作为备份/恢复协议的一部分管理:命令或模块必须幂等、失败可见,并通过从真实归档恢复来验证,而不是只看返回码。
OLAP 按批量装载 WAL 峰值配置归档吞吐与容量;归档跟不上时节流任务并报警,不能用虚假成功或激进清理掩盖积压。
小规格 有明确 PITR 需求才启用并交给成熟备份工具;可重建实例保持简单,但不要留下占位命令制造“已备份”的错觉。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG15–19 Beta 3 未修改;OLAP: PG15–19 Beta 3 未修改;CRIT: PG15–19 Beta 3 未修改;TINY: PG15–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 同时配置库,却期待 archive_command 在库失败时自动兜底。
  • 把不可信归档代码加载到服务器进程内。
  • 把模块返回成功误当成归档一定可恢复。
  • reload 到新模块后未验证积压处理、失败报告和回滚。
  • 模块反复失败却没有归档延迟告警,最终让保留 WAL 填满 pg_wal。

archive_mode · archive_command · archive_timeout · archive_cleanup_command · restore_command · recovery_end_command

参考资料

4 - archive_mode

archive_mode:允许使用 archive_command 归档 WAL 文件。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 off,context 为 postmaster。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:允许使用 archive_command 归档 WAL 文件。

身份

类型 , enum
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 , always, on, off
非枚举类型记为 —
分类 , Write-Ahead Log / Archiving
上游分类
最后 boot 值 , off
off

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 off off

机制详解

启用后,PostgreSQL 会运行 WAL 归档进程,并在段文件可被回收之前将每个已完成段交给 archive_command,或在支持版本中交给 archive_library。模式与命令或库相互独立,因此归档逻辑可以重载而无需退出归档模式。

在普通主库运行期间,on 与 always 没有区别。在恢复或备库模式下,on 不归档收到的 WAL,而 always 还会归档从归档恢复或通过流复制收到的段。

打开该模式并不能证明归档健康或可恢复。命令失败会让 WAL 在 pg_wal 中积累;错误地返回成功会造成不可恢复的 WAL 链。时间点恢复还需要合适的基础备份和经过验证的恢复流程。

调优建议

提示

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

场景 建议
OLTP 只为明确的 PITR 或日志传送需求启用,并使用可靠、幂等的归档实现。监控 pg_stat_archiver 失败、最新归档时间和 pg_wal 增长;恢复演练比命令返回成功更有说服力。
OLAP 按批量导入的 WAL 峰值规划归档带宽和目标容量。归档跟不上时,应节流或错峰批任务,而不是放任 pg_wal 写满。
小规格 只有理解保留策略和恢复步骤时才使用 pgBackRest 等托管工具。对于可随时重建的数据库,应保持关闭,而不是配置一个占位归档命令。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP on 不同于 boot 值 'on'
OLAP on 不同于 boot 值 'on'
CRIT on 不同于 boot 值 'on'
TINY on 不同于 boot 值 'on'
注意

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

常见坑

  • 启用 archive_mode 却使用空命令或失败命令,最终写满 pg_wal。
  • 使用 /bin/true 一类虚假成功命令,破坏可恢复的 WAL 链。
  • 误以为 archive_mode 可重载;修改它需要重启服务器。
  • 把 WAL 归档当作基础备份和恢复演练的替代品。
  • always 模式写共享归档时没有处理重复文件和并发竞态。

archive_command · archive_library · archive_timeout · wal_level · restore_command · max_wal_size

参考资料

5 - archive_timeout

archive_timeout:设置强制切换到下一个 WAL 文件前的最长等待时间。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 0 s,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置强制切换到下一个 WAL 文件前的最长等待时间。

身份

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

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 0 s 0 s

机制详解

设置强制切换到下一个 WAL 文件前的最长等待时间。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

在间隔内没有自然换段时,PostgreSQL 强制切换 WAL 段以便归档当前部分。它不会让 WAL 更早持久化;过小会产生大量未写满但仍占完整段空间的归档文件。

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

调优建议

提示

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

场景 建议
OLTP 把 archive_timeout 作为备份/恢复协议的一部分管理:命令或模块必须幂等、失败可见,并通过从真实归档恢复来验证,而不是只看返回码。
OLAP 按批量装载 WAL 峰值配置归档吞吐与容量;归档跟不上时节流任务并报警,不能用虚假成功或激进清理掩盖积压。
小规格 有明确 PITR 需求才启用并交给成熟备份工具;可重建实例保持简单,但不要留下占位命令制造“已备份”的错觉。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 300 不同于 boot 值 300
OLAP 300 不同于 boot 值 300
CRIT 300 不同于 boot 值 300
TINY 300 不同于 boot 值 300
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 300 (dcs);OLAP: PG9.0–19 Beta 3 = 300 (dcs);CRIT: PG9.0–19 Beta 3 = 300 (dcs);TINY: PG9.0–19 Beta 3 = 300 (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在限制低流量主库最新 WAL 尚未进入归档的最长时间;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 把它误当成提交持久化超时。
  • 间隔过小,制造大量几乎为空却占完整段空间的归档文件。
  • 误以为强制换段能解决归档进程缓慢或失败。
  • 混淆 pg_settings 的原始单位与配置文件可读单位。
  • 只做吞吐基准,不做崩溃恢复与归档还原。

archive_mode · archive_command · archive_library · archive_cleanup_command · restore_command · recovery_end_command

参考资料

6 - checkpoint_completion_target

checkpoint_completion_target:设置在检查点间隔中用于刷新脏缓冲区的目标时间比例。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 0.9,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置在检查点间隔中用于刷新脏缓冲区的目标时间比例。

身份

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

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–13 0.5 0.5
PG14–19 Beta 3 0.9 0.9

机制详解

PostgreSQL 会节流检查点写入,使其预计在可用间隔的这一比例处完成。可用间隔可能在下一次定时检查点结束,也可能因 WAL 容量更早触发,因此它是节奏目标,不是固定时长。

较大比例通常能把检查点 I/O 更均匀地摊开。较小比例会更快完成写入,形成更高的阶段性 I/O,随后出现空档;官方文档因此不建议降低该值。

过于接近 1 会给最终同步和其他检查点工作留下很少余量。PG14 将历史默认值从 0.5 改为 0.9,因此跨大版本比较配置时必须考虑这一变化。

调优建议

提示

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

场景 建议
OLTP 从对应版本的 0.9 默认值开始,只在延迟与 pg_stat_checkpointer 证据支持时调整。0.95 可能进一步平滑写入,但要验证检查点能稳定赶在下一触发条件之前完成。
OLAP 突发批处理往往由 WAL 容量提前触发检查点,因此通常先调大 max_wal_size。目标值应足够高以平滑 I/O,又不能让最终同步工作集中在末尾。
小规格 除非测量显示明确收益,否则使用 0.9。小型或慢速存储在目标值余量不足时,尤其容易受到检查点末尾同步尖峰影响。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 0.95 不同于 boot 值 0.95
OLAP 0.95 不同于 boot 值 0.95
CRIT 0.95 不同于 boot 值 0.95
TINY 0.95 不同于 boot 值 0.95
注意

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

常见坑

  • 把该值误解成秒数而不是比例。
  • 认为调低会减少总 I/O,实际只是把写入集中起来。
  • 设为 1.0,未给检查点收尾工作保留余量。
  • 忽略 max_wal_size 导致的提前检查点。
  • 跨版本比较时漏掉 PG14 的默认值变化。

checkpoint_timeout · max_wal_size · checkpoint_flush_after · checkpoint_warning · shared_buffers

参考资料

7 - checkpoint_flush_after

checkpoint_flush_after:设置检查点每写入多少页后刷出先前写入的数据。实测在档范围为 PG9.6–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 256 KiB (32 × 8kB),context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置检查点每写入多少页后刷出先前写入的数据。

身份

类型 , integer
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 , 8kB
原始单位
范围 , 0256
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Checkpoints
上游分类
最后 boot 值 , 32
256 KiB (32 × 8kB)

生命周期

Fact
首次观测 PG9.6
在档版本 PG9.6–19 Beta 3
移除版本
引入提交 428b1d6b29ca — Allow to trigger kernel writeback after a configurable number of writes.
提交日期 2016-02-19
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.6–19 Beta 3 32 8kB 256 KiB (32 × 8kB)

机制详解

设置检查点每写入多少页后刷出先前写入的数据。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

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

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

调优建议

提示

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

场景 建议
OLTP 先保证耐久性与恢复目标,再以 WAL 生成速率、刷写延迟、检查点和 pg_wal 峰值调 checkpoint_flush_after;每次改动都做崩溃/恢复与归档监控验证。
OLAP 按批量装载峰值规划 WAL、归档带宽和恢复 I/O;需要降低峰值时应协调装载节奏与检查点,而不是牺牲恢复链。
小规格 从安全默认或实测 Pigsty 值开始,按有限磁盘容量设置明确告警;不要仅为节省少量 I/O 就关闭耐久性或破坏恢复链。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.6–19 Beta 3 未修改;OLAP: PG9.6–19 Beta 3 未修改;CRIT: PG9.6–19 Beta 3 未修改;TINY: PG9.6–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 把原始值当作字节;未带单位的值按数据库块计量。
  • 设置过小,增加 writeback 调用与 I/O 碎片。
  • 设置过大,失去检查点最终同步前平滑写回的作用。
  • 把 writeback 提示误当持久化保证;真正的持久性仍由 fsync 与 wal_sync_method 决定。
  • 未测量检查点延迟与脏页行为就跨操作系统或文件系统照搬数值。

checkpoint_warning · checkpoint_timeout · checkpoint_completion_target · max_wal_size · min_wal_size · archive_cleanup_command

参考资料

8 - checkpoint_segments

checkpoint_segments:设置两次自动 WAL 检查点之间允许的最大日志段距离。实测在档范围为 PG9.0–9.4;最后在档的 PG9.4 启动默认值为 3,context 为 sighup。它在 PG9.5 被移除。
说明

Fact — 官方简述译文:设置两次自动 WAL 检查点之间允许的最大日志段距离。

身份

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

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–9.4
移除版本 PG9.5
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–9.4 3 3

机制详解

checkpoint_segments:设置两次自动 WAL 检查点之间允许的最大日志段距离。重新加载配置即可让服务器采用新值,无需完整重启。 本站在 PG9.0–9.4 实测到它;boot_val 是编译或初始化基线,并不能证明某个运行集群的当前有效值。

这是 PostgreSQL 9.5 之前的检查点容量控制:累计 WAL 接近指定段数时请求自动检查点。PG9.5 以 max_wal_size 取代它;新参数使用软性的字节容量预算,并与 checkpoint_timeout、checkpoint_completion_target 协同,而不是直接暴露 WAL 段数。

应与 max_wal_size、checkpoint_timeout、checkpoint_completion_target、wal_segment_size 一起理解。请在目标服务器检查 SHOW 与 pg_settings,确认 source 和 pending_restart,并在修改前后对比真实负载、日志和资源指标。

调优建议

提示

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

场景 建议
OLTP 不要把这个已退出的名称加入现代 OLTP 配置。应把原意迁移到文档给出的后继参数,在连接与写并发下验证,并清理仍会输出旧名称的自动化。
OLAP 升级分析型环境前应盘点所有生成配置,把旧控制映射到后继项,并比较执行计划、吞吐、WAL 或日志行为;不能假设旧数值可直接搬用。
小规格 记录旧覆盖存在的原因后将其删除。小节点应先采用后继参数默认值,实测后再调整;未知的启动参数可能直接阻止服务器启动。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–9.4 未修改;OLAP: PG9.0–9.4 未修改;CRIT: PG9.0–9.4 未修改;TINY: PG9.0–9.4 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 把 checkpoint_segments 的实测 boot_val 当成初始化后或托管集群当前有效值的证明。
  • 忽略 pg_settings 报告的 sighup context,误以为修改会立即生效。
  • 孤立修改该参数,没有检查关联上限、可观测性和回滚路径。
  • 把已移除名称复制到现代 postgresql.conf,而没有迁移到文档给出的后继参数。

max_wal_size · checkpoint_timeout · checkpoint_completion_target · wal_segment_size · min_wal_size

参考资料

9 - checkpoint_timeout

checkpoint_timeout:设置两次自动 WAL 检查点之间的最长时间。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 5 min,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置两次自动 WAL 检查点之间的最长时间。

身份

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

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 300 s 5 min

机制详解

达到 checkpoint_timeout 后系统会考虑执行自动检查点,但 max_wal_size 可以更早触发。如果上次检查点后没有写入 WAL,PostgreSQL 可以跳过这次定时检查点,因此它是最长调度间隔,而不是固定周期工作的承诺。

较长间隔通常会减少检查点次数和全页写放大,但崩溃恢复时可能需要重放更多 WAL。较短间隔能收紧重放区间,却会增加脏页写回以及每次检查点后的全页镜像。

主库检查点记录也限制备库可执行重启点的位置。不要用本参数定义 WAL 归档的 RPO;低 WAL 负载下强制切换段应使用 archive_timeout。

调优建议

提示

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

场景 建议
OLTP 与 max_wal_size 联合调优,并通过 checkpoint_completion_target 平摊检查点 I/O。只有在量化恢复要求、请求型与定时型检查点比例、写延迟和 WAL 量之后才延长间隔。
OLAP 批处理期间通常是 max_wal_size 先触发。如果容量型检查点占主导,应先增加 WAL 空间,同时保留能满足重启与恢复目标的超时值。
小规格 在恢复时间重要且存储有限的环境里,上游 5 分钟是合理起点。延长间隔必须有明确的磁盘余量和经过测试的崩溃恢复预算。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 15min 不同于 boot 值 15min
OLAP 15min 不同于 boot 值 15min
CRIT 15min 不同于 boot 值 15min
TINY 15min 不同于 boot 值 15min
注意

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

常见坑

  • 认为空闲系统也必然严格按该间隔执行检查点。
  • 忘记 max_wal_size 可能更早触发检查点。
  • 用 checkpoint_timeout 代替 archive_timeout 限制归档延迟。
  • 增大后没有计入更长的崩溃恢复重放区间。
  • 设置过小导致全页写和检查点 I/O 占主导。

max_wal_size · checkpoint_completion_target · checkpoint_warning · archive_timeout · full_page_writes · checkpoint_flush_after

参考资料

10 - checkpoint_warning

checkpoint_warning:设置 WAL 容量触发的检查点过于频繁时发出警告的时间阈值。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 30 s,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 WAL 容量触发的检查点过于频繁时发出警告的时间阈值。

身份

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

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 30 s 30 s

机制详解

设置 WAL 容量触发的检查点过于频繁时发出警告的时间阈值。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

该参数只在 WAL 容量触发的检查点间隔短于阈值时写日志,并不会推迟检查点。频繁告警通常意味着 max_wal_size 相对 WAL 生成速率过小。

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

调优建议

提示

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

场景 建议
OLTP 先保证耐久性与恢复目标,再以 WAL 生成速率、刷写延迟、检查点和 pg_wal 峰值调 checkpoint_warning;每次改动都做崩溃/恢复与归档监控验证。
OLAP 按批量装载峰值规划 WAL、归档带宽和恢复 I/O;需要降低峰值时应协调装载节奏与检查点,而不是牺牲恢复链。
小规格 从安全默认或实测 Pigsty 值开始,按有限磁盘容量设置明确告警;不要仅为节省少量 I/O 就关闭耐久性或破坏恢复链。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 未修改;OLAP: PG9.0–19 Beta 3 未修改;CRIT: PG9.0–19 Beta 3 未修改;TINY: PG9.0–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 把告警阈值误当成会推迟或节流检查点的控制项。
  • 设为零,掩盖 WAL 容量触发检查点过于频繁的证据。
  • 只提高阈值,而不调查 WAL 速率、max_wal_size 与 requested checkpoint 频率。
  • 把 checkpoint_warning 设得高于 checkpoint_timeout,却期待时间触发检查点产生该告警。

checkpoint_flush_after · checkpoint_timeout · checkpoint_completion_target · max_wal_size · min_wal_size · archive_cleanup_command

参考资料

11 - commit_delay

commit_delay:设置事务提交与将 WAL 刷入磁盘之间的延迟(微秒)。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 0,context 为 superuser。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置事务提交与将 WAL 刷入磁盘之间的延迟(微秒)。

身份

类型 , integer
上游 pg_settings 类型
Context , superuser
超级用户可在运行时修改
单位 ,
原始单位
范围 , 0100000
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Settings
上游分类
最后 boot 值 , 0
0

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 0 0

机制详解

设置事务提交与将 WAL 刷入磁盘之间的延迟(微秒)。超级用户或获授 SET 权限的角色可在相应的会话或配置作用域中修改它。

后端准备刷提交 WAL 时可等待这些微秒,让并发提交共用一次持久化刷写;只有至少存在 commit_siblings 个其他活动事务时才考虑等待。这是在单次提交延迟与 group commit 效率之间取舍。

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

调优建议

提示

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

场景 建议
OLTP 只在高并发、WALSync 明显且 p95/p99 提交延迟可接受时基准测试 commit_delay;同时成对调整 commit_delay 与 commit_siblings,并保留关闭基线。
OLAP 批量事务通常应通过合理批次大小减少提交频率;不要用 group-commit 延迟弥补每行提交的 ETL 设计。
小规格 并发不足时几乎没有收益,保持 commit_delay=0 最简单;微秒级设置也要从端到端延迟测量证明。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 20 不同于 boot 值 20
OLAP 20 不同于 boot 值 20
CRIT 20 不同于 boot 值 20
TINY 20 不同于 boot 值 20
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 20 (dcs);OLAP: PG9.0–19 Beta 3 = 20 (dcs);CRIT: PG9.0–19 Beta 3 = 20 (dcs);TINY: PG9.0–19 Beta 3 = 20 (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在在并发提交负载下促成极短的 group commit 批处理;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 设置了延迟,但真实并发从未达到 commit_siblings 门槛。
  • 把数值误读成毫秒;该参数单位是微秒。
  • 平均 group commit 吞吐提高,却违反 p95/p99 提交延迟目标。
  • 在提交路径无需刷 WAL 时仍期待该延迟生效。
  • 没有与 commit_siblings、WALSync 等待一起测量就修改 commit_delay。

commit_siblings · synchronous_commit · wal_writer_delay · wal_sync_method · fsync · full_page_writes

参考资料

12 - commit_siblings

commit_siblings:设置启用 commit_delay 前所需的并发活动事务最低数量。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 5,context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置启用 commit_delay 前所需的并发活动事务最低数量。

身份

类型 , integer
上游 pg_settings 类型
Context , user
普通用户可在运行时修改
单位 ,
原始单位
范围 , 01000
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Settings
上游分类
最后 boot 值 , 5
5

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 5 5

机制详解

设置启用 commit_delay 前所需的并发活动事务最低数量。它可在会话级修改,因此不同会话可能采用不同的行为。

这是 commit_delay 的并发门槛,在需要提交刷写时按其他活动事务计数,而不是已经排队的 commit 数量。commit_delay 为零时它没有实际作用。

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

调优建议

提示

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

场景 建议
OLTP 只在高并发、WALSync 明显且 p95/p99 提交延迟可接受时基准测试 commit_siblings;同时成对调整 commit_delay 与 commit_siblings,并保留关闭基线。
OLAP 批量事务通常应通过合理批次大小减少提交频率;不要用 group-commit 延迟弥补每行提交的 ETL 设计。
小规格 并发不足时几乎没有收益,保持 commit_delay=0 最简单;微秒级设置也要从端到端延迟测量证明。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 10 不同于 boot 值 10
OLAP 10 不同于 boot 值 10
CRIT 10 不同于 boot 值 10
TINY 10 不同于 boot 值 10
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 10 (dcs);OLAP: PG9.0–19 Beta 3 = 10 (dcs);CRIT: PG9.0–19 Beta 3 = 10 (dcs);TINY: PG9.0–19 Beta 3 = 10 (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在只在事务并发已经较高时才应用 commit_delay;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • commit_delay 为零时仍调该参数;此时门槛没有作用。
  • 把它当作已等待 commit 的数量,而不是其他活动事务数量。
  • 门槛过低,在普通中等并发下也增加提交延迟。
  • 把会话级试验直接全局发布,却没有比较提交延迟与 WALSync 行为。

commit_delay · synchronous_commit · wal_writer_delay · wal_sync_method · fsync · full_page_writes

参考资料

13 - fsync

fsync:强制将更新同步到磁盘。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 on,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:强制将更新同步到磁盘。

身份

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

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 on on

机制详解

强制将更新同步到磁盘。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

开启时,PostgreSQL 发出持久化屏障,保证 WAL 与数据写入顺序能承受操作系统或掉电故障。关闭可能改善写入跑分,但崩溃后会留下 crash recovery 无法修复的损坏;重新开启也不能追溯同步此前的不安全写入。

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

调优建议

提示

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

场景 建议
OLTP 持久生产数据保持 fsync=on。性能问题应从存储延迟、检查点、WAL 压缩和批处理着手,不要用关闭崩溃安全换吞吐。
OLAP 批量装载同样需要可恢复性;用 UNLOGGED/临时数据结构或可重建 staging 明确缩小耐久范围,而不是全局关闭保护。
小规格 持久小实例也保持开启。只有数据可随时重建且与生产明确隔离的临时集群,才可在书面接受风险后例外。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 未修改;OLAP: PG9.0–19 Beta 3 未修改;CRIT: PG9.0–19 Beta 3 未修改;TINY: PG9.0–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 在持久数据上关闭,并误以为 UPS 或 RAID cache 单独就足够。
  • 重新开启后误以为此前不安全写入已自动持久化。
  • 只测试干净关机,不测试掉电恢复。
  • 混淆 pg_settings 的原始单位与配置文件可读单位。
  • 只做吞吐基准,不做崩溃恢复与归档还原。

data_sync_retry · restart_after_crash · recovery_init_sync_method · full_page_writes · wal_sync_method · synchronous_commit

参考资料

14 - full_page_writes

full_page_writes:检查点后页面首次修改时将完整页面写入 WAL。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 on,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:检查点后页面首次修改时将完整页面写入 WAL。

身份

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

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 on on

机制详解

检查点后页面首次修改时将完整页面写入 WAL。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

每次检查点后,数据页第一次修改会把完整页映像写入 WAL,避免撕裂页恢复时拼接新旧扇区。额外 WAL 集中在检查点后并受 wal_compression 影响;除非存储栈提供等价的原子页保证,否则不应关闭。

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

调优建议

提示

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

场景 建议
OLTP 持久生产数据保持 full_page_writes=on。性能问题应从存储延迟、检查点、WAL 压缩和批处理着手,不要用关闭崩溃安全换吞吐。
OLAP 批量装载同样需要可恢复性;用 UNLOGGED/临时数据结构或可重建 staging 明确缩小耐久范围,而不是全局关闭保护。
小规格 持久小实例也保持开启。只有数据可随时重建且与生产明确隔离的临时集群,才可在书面接受风险后例外。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 未修改;OLAP: PG9.0–19 Beta 3 未修改;CRIT: PG9.0–19 Beta 3 未修改;TINY: PG9.0–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 没有端到端原子页写保证就关闭该参数。
  • 把它增加的 WAL 量误解成每次修改都会记录整页。
  • 忽略检查点之后全页镜像集中出现的 WAL 突发。
  • 误以为 reload 后会追溯保护在 full_page_writes=off 期间已经生成的 WAL。
  • 关闭参数做基准,却没有端到端崩溃、恢复与 torn-page 测试。

data_sync_retry · restart_after_crash · recovery_init_sync_method · fsync · wal_sync_method · synchronous_commit

参考资料

15 - 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

参考资料

16 - min_wal_size

min_wal_size:设置 WAL 可收缩到的最小规模。实测在档范围为 PG9.5–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 80 MiB,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 WAL 可收缩到的最小规模。

身份

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

生命周期

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 5 16MB 80 MiB (5 × 16MB)
PG10–19 Beta 3 80 MB 80 MiB

机制详解

设置 WAL 可收缩到的最小规模。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

低于该下限时,检查点会保留旧 WAL 段供复用而不是删除。它是保留/回收空间的下限,不是上限;归档失败、复制槽、wal_keep_size 与 max_wal_size 都可能让 pg_wal 远大于它。

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

调优建议

提示

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

场景 建议
OLTP 按检查点之间的常态 WAL 生成量与文件创建成本设置回收池下限;它应明显低于可用 pg_wal 空间,并与 max_wal_size 一起测量。
OLAP 大批装载可受益于更大的预留回收池,但应依据可重复批次峰值,而不是照搬任意 GB 数;归档与复制槽空间另算。
小规格 先核对 Pigsty 的 5GB 矩阵值是否适合实际磁盘;对小盘这不是免费的默认值,调低时要接受更多段创建/删除抖动。

Pigsty 取值

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

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

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.5–19 Beta 3 = 5GB (dcs);OLAP: PG9.5–19 Beta 3 = 5GB (dcs);CRIT: PG9.5–19 Beta 3 = 5GB (dcs);TINY: PG9.5–19 Beta 3 = 5GB (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在保留足以吸收常规突发、避免文件抖动的可复用 WAL 池;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 把它理解成 pg_wal 上限。
  • 不考虑 wal_segment_size 取整和突发速率。
  • 忽略归档/复制槽保留可同时越过 min_wal_size 与 max_wal_size。
  • 混淆 pg_settings 的原始单位与配置文件可读单位。
  • 只做吞吐基准,不做崩溃恢复与归档还原。

max_wal_size · wal_keep_size · wal_segment_size · checkpoint_timeout · checkpoint_completion_target · checkpoint_flush_after

参考资料

17 - recovery_end_command

recovery_end_command:设置恢复结束时执行一次的 shell 命令。它是 PG12–18 的 sighup 参数;最新实测启动默认值为 empty。
说明

Fact — 官方简述译文:设置恢复结束时执行一次的 shell 命令。

身份

类型 , string
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Archive Recovery
上游分类
最后 boot 值 , ""
empty string

生命周期

Fact
首次观测 PG12
在档版本 PG12–19 Beta 3
移除版本
引入提交 2dedf4d9a899 — Integrate recovery.conf into postgresql.conf
提交日期 2018-11-25
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG12–19 Beta 3 "" empty string

机制详解

设置恢复结束时执行一次的 shell 命令。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

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

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

调优建议

提示

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

场景 建议
OLTP 把 recovery_end_command 作为备份/恢复协议的一部分管理:命令或模块必须幂等、失败可见,并通过从真实归档恢复来验证,而不是只看返回码。
OLAP 按批量装载 WAL 峰值配置归档吞吐与容量;归档跟不上时节流任务并报警,不能用虚假成功或激进清理掩盖积压。
小规格 有明确 PITR 需求才启用并交给成熟备份工具;可重建实例保持简单,但不要留下占位命令制造“已备份”的错觉。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG12–19 Beta 3 未修改;OLAP: PG12–19 Beta 3 未修改;CRIT: PG12–19 Beta 3 未修改;TINY: PG12–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 把 shell 命令当作事务性的提升钩子,并误以为失败会回滚恢复。
  • 误读 %r,删除其他恢复消费者仍需要的 WAL。
  • 没有考虑提升或恢复重试,就执行非幂等的外部副作用。
  • 误以为 reload 会执行命令;它只在归档恢复结束时运行一次。
  • 在 postgres 服务账号执行的命令中嵌入凭据或不安全的 shell 展开。

archive_mode · archive_command · archive_library · archive_timeout · archive_cleanup_command · restore_command

参考资料

18 - recovery_prefetch

recovery_prefetch:在恢复期间预取 WAL 引用的数据块。它是 PG15–18 的 sighup 参数;最新实测启动默认值为 try。
说明

Fact — 官方简述译文:在恢复期间预取 WAL 引用的数据块。

身份

类型 , enum
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 , off, on, try
非枚举类型记为 —
分类 , Write-Ahead Log / Recovery
上游分类
最后 boot 值 , try
try

生命周期

Fact
首次观测 PG15
在档版本 PG15–19 Beta 3
移除版本
引入提交 1d257577e08d — Optionally prefetch referenced data in recovery.
提交日期 2021-04-08
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG15–19 Beta 3 try try

机制详解

在恢复期间预取 WAL 引用的数据块。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

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

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

调优建议

提示

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

场景 建议
OLTP 在与生产相同的存储上用恢复/备库追赶基准调 recovery_prefetch,同时观察 replay I/O wait、缓存命中与 maintenance_io_concurrency;没有测量收益就保留默认。
OLAP 大型数据集且随机读取较慢时可能收益更大,但过度预取会挤占查询 I/O 与缓存;在故障恢复与读备库两种场景分别测试。
小规格 默认通常足够。内存与 I/O 队列有限时,不要为扩大超前窗口占用资源,除非恢复时间目标有明确缺口。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG15–19 Beta 3 未修改;OLAP: PG15–19 Beta 3 未修改;CRIT: PG15–19 Beta 3 未修改;TINY: PG15–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 误以为 try 在操作系统不支持所需 read-ahead advice 时也一定启用预取。
  • 扩大超前读取,却不考虑 wal_decode_buffer_size 与 maintenance_io_concurrency。
  • 让恢复预取与 hot standby 查询争夺缓存和 I/O 队列深度。
  • 只测试顺序恢复场景,而该场景的块预取收益可能很小。

wal_decode_buffer_size · maintenance_io_concurrency · effective_io_concurrency · shared_buffers · archive_cleanup_command · archive_command

参考资料

19 - recovery_target

recovery_target:设为 immediate,使恢复在首次达到一致状态时结束。它是 PG12–18 的 postmaster 参数;最新实测启动默认值为 empty。
说明

Fact — 官方简述译文:设为 immediate,使恢复在首次达到一致状态时结束。

身份

类型 , string
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Recovery Target
上游分类
最后 boot 值 , ""
empty string

生命周期

Fact
首次观测 PG12
在档版本 PG12–19 Beta 3
移除版本
引入提交 2dedf4d9a899 — Integrate recovery.conf into postgresql.conf
提交日期 2018-11-25
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG12–19 Beta 3 "" empty string

机制详解

设为 immediate,使恢复在首次达到一致状态时结束。该值在服务器启动时固定,修改后必须重启。

唯一允许的值是 immediate,使目标恢复停在首个一致点,通常即在线基础备份结束位置。它与 LSN、名称、时间和 XID 目标选择器互斥。

recovery_target、recovery_target_lsn、recovery_target_name、recovery_target_time 与 recovery_target_xid 最多只能设置一个;timeline、inclusive 与 action 是修饰项。必须从同一基础备份沿完整 WAL 链演练,目标不可达会使目标恢复失败。

调优建议

提示

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

场景 建议
OLTP 这不是常态性能参数。只在隔离的恢复实例中设置 recovery_target,先记录目标证据、基础备份、时间线和预期边界,再演练并由第二人复核。
OLAP 大型恢复应先估算 WAL 重放时间与检查窗口;目标命中后用只读校验确认事实,不能用大查询拖住或污染恢复决策。
小规格 优先用备份工具生成受控恢复配置;不要在日常主库/备库模板中永久保留目标参数,恢复后清理 signal 文件与目标设置。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG12–19 Beta 3 未修改;OLAP: PG12–19 Beta 3 未修改;CRIT: PG12–19 Beta 3 未修改;TINY: PG12–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 把 immediate 与 LSN、名称、时间或 XID 选择器同时设置。
  • 把在线备份后的首个一致点误当成业务所需恢复点。
  • 在普通备库配置中残留 immediate,意外结束恢复。
  • 未创建 recovery.signal 就期待该目标控制崩溃恢复。
  • 所需 WAL 链未达到一致点却误判恢复成功。

recovery_target_time · recovery_target_xid · recovery_target_lsn · recovery_target_name · recovery_target_inclusive · recovery_target_action

参考资料

20 - recovery_target_action

recovery_target_action:设置到达恢复目标后执行的动作。它是 PG12–18 的 postmaster 参数;最新实测启动默认值为 pause。
说明

Fact — 官方简述译文:设置到达恢复目标后执行的动作。

身份

类型 , enum
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 , pause, promote, shutdown
非枚举类型记为 —
分类 , Write-Ahead Log / Recovery Target
上游分类
最后 boot 值 , pause
pause

生命周期

Fact
首次观测 PG12
在档版本 PG12–19 Beta 3
移除版本
引入提交 2dedf4d9a899 — Integrate recovery.conf into postgresql.conf
提交日期 2018-11-25
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG12–19 Beta 3 pause pause

机制详解

选择 PostgreSQL 到达已配置恢复目标后的动作。恢复启动时读取该值。

pause 暂停恢复供检查,promote 结束恢复并进入正常服务,shutdown 在目标处停止服务器;使用 pause 查询检查需要启用 hot_standby。

没有停止目标时该设置无效。使用 shutdown 时 recovery.signal 不会删除,配置不变的再次启动会到达目标后再次停机;验证后必须有意清理或修改恢复配置。

调优建议

提示

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

场景 建议
OLTP 这不是常态性能参数。只在隔离的恢复实例中设置 recovery_target_action,先记录目标证据、基础备份、时间线和预期边界,再演练并由第二人复核。
OLAP 大型恢复应先估算 WAL 重放时间与检查窗口;目标命中后用只读校验确认事实,不能用大查询拖住或污染恢复决策。
小规格 优先用备份工具生成受控恢复配置;不要在日常主库/备库模板中永久保留目标参数,恢复后清理 signal 文件与目标设置。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG12–19 Beta 3 未修改;OLAP: PG12–19 Beta 3 未修改;CRIT: PG12–19 Beta 3 未修改;TINY: PG12–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 未配置停止目标却期待动作生效。
  • hot_standby 关闭时使用 pause,却期待用查询检查数据库。
  • 尚未验证恢复状态就使用 promote。
  • 使用 shutdown 后保留 recovery.signal 与相同目标直接重启。
  • 把 shutdown 当作永久删除目标后的 WAL;下次启动仍会从最后检查点重放到目标。

recovery_target · recovery_target_time · recovery_target_lsn · recovery_target_inclusive · recovery_target_timeline · hot_standby

参考资料

21 - recovery_target_inclusive

recovery_target_inclusive:设置是否包含恢复目标所对应的事务。它是 PG12–18 的 postmaster 参数;最新实测启动默认值为 on。
说明

Fact — 官方简述译文:设置是否包含恢复目标所对应的事务。

身份

类型 , bool
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Recovery Target
上游分类
最后 boot 值 , on
on

生命周期

Fact
首次观测 PG12
在档版本 PG12–19 Beta 3
移除版本
引入提交 2dedf4d9a899 — Integrate recovery.conf into postgresql.conf
提交日期 2018-11-25
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG12–19 Beta 3 on on

机制详解

选择精确恢复边界的哪一侧被保留。它是 postmaster 参数,在目标恢复启动时读取。

on 在目标之后停止并包含目标 LSN、提交时间或 XID;off 在目标之前停止并排除它。该设置只适用于 recovery_target_lsn、recovery_target_time 与 recovery_target_xid。

它对 immediate 或命名还原点目标无效。应依据已识别的 WAL/业务证据选择边界,并验证恢复后的行与事务,而不只查看显示的时间戳或 LSN。

调优建议

提示

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

场景 建议
OLTP 这不是常态性能参数。只在隔离的恢复实例中设置 recovery_target_inclusive,先记录目标证据、基础备份、时间线和预期边界,再演练并由第二人复核。
OLAP 大型恢复应先估算 WAL 重放时间与检查窗口;目标命中后用只读校验确认事实,不能用大查询拖住或污染恢复决策。
小规格 优先用备份工具生成受控恢复配置;不要在日常主库/备库模板中永久保留目标参数,恢复后清理 signal 文件与目标设置。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG12–19 Beta 3 未修改;OLAP: PG12–19 Beta 3 未修改;CRIT: PG12–19 Beta 3 未修改;TINY: PG12–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 期待它影响 immediate 或命名还原点目标。
  • 未识别准确边界事务或 WAL 记录就选择 on/off。
  • 误以为相同时间戳对应唯一确定的提交边界。
  • 只验证报告的重放位置,而不验证恢复后的应用数据。
  • 把该值留在复用恢复模板中,却未记录预期边界侧。

recovery_target_lsn · recovery_target_time · recovery_target_xid · recovery_target_action · recovery_target_timeline · restore_command

参考资料

22 - recovery_target_lsn

recovery_target_lsn:设置恢复所推进到的 WAL LSN。它是 PG12–18 的 postmaster 参数;最新实测启动默认值为 empty。
说明

Fact — 官方简述译文:设置恢复所推进到的 WAL LSN。

身份

类型 , string
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Recovery Target
上游分类
最后 boot 值 , ""
empty string

生命周期

Fact
首次观测 PG12
在档版本 PG12–19 Beta 3
移除版本
引入提交 2dedf4d9a899 — Integrate recovery.conf into postgresql.conf
提交日期 2018-11-25
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG12–19 Beta 3 "" empty string

机制详解

设置恢复所推进到的 WAL LSN。该值在服务器启动时固定,修改后必须重启。

恢复推进到一个 pg_lsn 位置,并由 recovery_target_inclusive 选择边界哪一侧。该 LSN 必须位于所选恢复时间线上,且基础备份之后的 WAL 链能够到达。

recovery_target、recovery_target_lsn、recovery_target_name、recovery_target_time 与 recovery_target_xid 最多只能设置一个;timeline、inclusive 与 action 是修饰项。必须从同一基础备份沿完整 WAL 链演练,目标不可达会使目标恢复失败。

调优建议

提示

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

场景 建议
OLTP 这不是常态性能参数。只在隔离的恢复实例中设置 recovery_target_lsn,先记录目标证据、基础备份、时间线和预期边界,再演练并由第二人复核。
OLAP 大型恢复应先估算 WAL 重放时间与检查窗口;目标命中后用只读校验确认事实,不能用大查询拖住或污染恢复决策。
小规格 优先用备份工具生成受控恢复配置;不要在日常主库/备库模板中永久保留目标参数,恢复后清理 signal 文件与目标设置。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG12–19 Beta 3 未修改;OLAP: PG12–19 Beta 3 未修改;CRIT: PG12–19 Beta 3 未修改;TINY: PG12–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 使用另一集群的 LSN,或使用不源自基础备份的时间线 LSN。
  • 同时设置另一个恢复目标选择器。
  • 未识别必须包含的 WAL 记录就选择 inclusive。
  • 请求超过归档/流式 WAL 可用范围的 LSN,形成不可达目标。
  • 把 LSN 当普通十进制数比较,而不是 pg_lsn 值。

recovery_target · recovery_target_time · recovery_target_xid · recovery_target_name · recovery_target_inclusive · recovery_target_action

参考资料

23 - recovery_target_name

recovery_target_name:设置恢复所推进到的命名还原点。它是 PG12–18 的 postmaster 参数;最新实测启动默认值为 empty。
说明

Fact — 官方简述译文:设置恢复所推进到的命名还原点。

身份

类型 , string
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Recovery Target
上游分类
最后 boot 值 , ""
empty string

生命周期

Fact
首次观测 PG12
在档版本 PG12–19 Beta 3
移除版本
引入提交 2dedf4d9a899 — Integrate recovery.conf into postgresql.conf
提交日期 2018-11-25
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG12–19 Beta 3 "" empty string

机制详解

设置恢复所推进到的命名还原点。该值在服务器启动时固定,修改后必须重启。

恢复停在此前由 pg_create_restore_point() 写入的命名还原点。只有所选时间线的 WAL 中确实存在对应记录,名称才有意义。

recovery_target、recovery_target_lsn、recovery_target_name、recovery_target_time 与 recovery_target_xid 最多只能设置一个;timeline、inclusive 与 action 是修饰项。必须从同一基础备份沿完整 WAL 链演练,目标不可达会使目标恢复失败。

调优建议

提示

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

场景 建议
OLTP 这不是常态性能参数。只在隔离的恢复实例中设置 recovery_target_name,先记录目标证据、基础备份、时间线和预期边界,再演练并由第二人复核。
OLAP 大型恢复应先估算 WAL 重放时间与检查窗口;目标命中后用只读校验确认事实,不能用大查询拖住或污染恢复决策。
小规格 优先用备份工具生成受控恢复配置;不要在日常主库/备库模板中永久保留目标参数,恢复后清理 signal 文件与目标设置。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG12–19 Beta 3 未修改;OLAP: PG12–19 Beta 3 未修改;CRIT: PG12–19 Beta 3 未修改;TINY: PG12–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 指定的还原点 WAL 记录不在所选时间线中。
  • 误以为 recovery_target_inclusive 会改变命名还原点边界。
  • 同时设置另一个恢复目标选择器。
  • 拼错区分大小写的还原点名称,使目标不可达。
  • 只记录业务标签,却未记录集群、时间线与基础备份关系。

recovery_target · recovery_target_time · recovery_target_xid · recovery_target_lsn · recovery_target_inclusive · recovery_target_action

参考资料

24 - recovery_target_time

recovery_target_time:设置恢复所推进到的时间戳。它是 PG12–18 的 postmaster 参数;最新实测启动默认值为 empty。
说明

Fact — 官方简述译文:设置恢复所推进到的时间戳。

身份

类型 , string
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Recovery Target
上游分类
最后 boot 值 , ""
empty string

生命周期

Fact
首次观测 PG12
在档版本 PG12–19 Beta 3
移除版本
引入提交 2dedf4d9a899 — Integrate recovery.conf into postgresql.conf
提交日期 2018-11-25
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG12–19 Beta 3 "" empty string

机制详解

设置恢复所推进到的时间戳。该值在服务器启动时固定,修改后必须重启。

恢复用事务提交记录与该时间戳比较;数值 UTC 偏移或完整时区名可避免缩写歧义。recovery_target_inclusive 决定是否重放恰好位于边界的提交。

recovery_target、recovery_target_lsn、recovery_target_name、recovery_target_time 与 recovery_target_xid 最多只能设置一个;timeline、inclusive 与 action 是修饰项。必须从同一基础备份沿完整 WAL 链演练,目标不可达会使目标恢复失败。

调优建议

提示

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

场景 建议
OLTP 这不是常态性能参数。只在隔离的恢复实例中设置 recovery_target_time,先记录目标证据、基础备份、时间线和预期边界,再演练并由第二人复核。
OLAP 大型恢复应先估算 WAL 重放时间与检查窗口;目标命中后用只读校验确认事实,不能用大查询拖住或污染恢复决策。
小规格 优先用备份工具生成受控恢复配置;不要在日常主库/备库模板中永久保留目标参数,恢复后清理 signal 文件与目标设置。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG12–19 Beta 3 未修改;OLAP: PG12–19 Beta 3 未修改;CRIT: PG12–19 Beta 3 未修改;TINY: PG12–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 使用有歧义的时区缩写,而不是数值偏移或完整时区名。
  • 误以为一个墙钟时间戳能唯一标识业务事务。
  • 同时设置另一个恢复目标选择器。
  • 未识别准确边界提交就选择 inclusive on/off。
  • 请求的时间不在可达 WAL 范围内或位于错误时间线。

recovery_target · recovery_target_xid · recovery_target_lsn · recovery_target_name · recovery_target_inclusive · recovery_target_action

参考资料

25 - recovery_target_timeline

recovery_target_timeline:指定要恢复到的时间线。它是 PG12–18 的 postmaster 参数;最新实测启动默认值为 latest。
说明

Fact — 官方简述译文:指定要恢复到的时间线。

身份

类型 , string
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Recovery Target
上游分类
最后 boot 值 , latest
latest

生命周期

Fact
首次观测 PG12
在档版本 PG12–19 Beta 3
移除版本
引入提交 2dedf4d9a899 — Integrate recovery.conf into postgresql.conf
提交日期 2018-11-25
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG12–19 Beta 3 latest latest

机制详解

指定恢复要沿用的时间线历史。它是 postmaster 参数,只在本次恢复启动时读取。

latest 跟随归档中最新时间线,current 留在基础备份当时的时间线;显式十进制或带 0x 前缀的十六进制 ID 选择特定分支。时间线既可单独选择,也可与更早的停止目标组合。

所选时间线必须源自该基础备份,并且对应 history/WAL 文件可用。该参数只选择分支,不会自行选择事务边界或提升服务器。

调优建议

提示

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

场景 建议
OLTP 这不是常态性能参数。只在隔离的恢复实例中设置 recovery_target_timeline,先记录目标证据、基础备份、时间线和预期边界,再演练并由第二人复核。
OLAP 大型恢复应先估算 WAL 重放时间与检查窗口;目标命中后用只读校验确认事实,不能用大查询拖住或污染恢复决策。
小规格 优先用备份工具生成受控恢复配置;不要在日常主库/备库模板中永久保留目标参数,恢复后清理 signal 文件与目标设置。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG12–19 Beta 3 未修改;OLAP: PG12–19 Beta 3 未修改;CRIT: PG12–19 Beta 3 未修改;TINY: PG12–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 需要沿旧分支重新恢复时仍使用 latest。
  • 所需 WAL 只在后代时间线时仍使用 current。
  • 选择不源自基础备份的时间线。
  • 未保留时间线 history 文件与对应 WAL。
  • 把时间线选择误当成停止目标或提升命令。

recovery_target · recovery_target_time · recovery_target_lsn · recovery_target_action · restore_command · primary_conninfo

参考资料

26 - recovery_target_xid

recovery_target_xid:设置恢复所推进到的事务 ID。它是 PG12–18 的 postmaster 参数;最新实测启动默认值为 empty。
说明

Fact — 官方简述译文:设置恢复所推进到的事务 ID。

身份

类型 , string
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Recovery Target
上游分类
最后 boot 值 , ""
empty string

生命周期

Fact
首次观测 PG12
在档版本 PG12–19 Beta 3
移除版本
引入提交 2dedf4d9a899 — Integrate recovery.conf into postgresql.conf
提交日期 2018-11-25
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG12–19 Beta 3 "" empty string

机制详解

设置恢复所推进到的事务 ID。该值在服务器启动时固定,修改后必须重启。

目标是指定事务 ID 的提交记录,而不是所有事务的简单数值顺序:XID 在事务开始时分配,提交顺序可能不同。recovery_target_inclusive 决定是否包含目标事务。

recovery_target、recovery_target_lsn、recovery_target_name、recovery_target_time 与 recovery_target_xid 最多只能设置一个;timeline、inclusive 与 action 是修饰项。必须从同一基础备份沿完整 WAL 链演练,目标不可达会使目标恢复失败。

调优建议

提示

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

场景 建议
OLTP 这不是常态性能参数。只在隔离的恢复实例中设置 recovery_target_xid,先记录目标证据、基础备份、时间线和预期边界,再演练并由第二人复核。
OLAP 大型恢复应先估算 WAL 重放时间与检查窗口;目标命中后用只读校验确认事实,不能用大查询拖住或污染恢复决策。
小规格 优先用备份工具生成受控恢复配置;不要在日常主库/备库模板中永久保留目标参数,恢复后清理 signal 文件与目标设置。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG12–19 Beta 3 未修改;OLAP: PG12–19 Beta 3 未修改;CRIT: PG12–19 Beta 3 未修改;TINY: PG12–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 误以为 XID 数值顺序等于提交顺序;XID 在事务开始时分配。
  • 使用来自另一集群或无关时间线的 XID。
  • 同时设置另一个恢复目标选择器。
  • 未决定是否需要目标事务本身就选择 inclusive。
  • 把 XID 当作跨回卷与跨集群全局唯一的业务标识。

recovery_target · recovery_target_time · recovery_target_lsn · recovery_target_name · recovery_target_inclusive · recovery_target_action

参考资料

27 - restore_command

restore_command:设置取回归档 WAL 文件时调用的 shell 命令。它是 PG12–18 的 sighup 参数;最新实测启动默认值为 empty。
说明

Fact — 官方简述译文:设置取回归档 WAL 文件时调用的 shell 命令。

身份

类型 , string
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Archive Recovery
上游分类
最后 boot 值 , ""
empty string

生命周期

Fact
首次观测 PG12
在档版本 PG12–19 Beta 3
移除版本
引入提交 2dedf4d9a899 — Integrate recovery.conf into postgresql.conf
提交日期 2018-11-25
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG12–19 Beta 3 "" empty string

机制详解

设置取回归档 WAL 文件时调用的 shell 命令。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

归档恢复时 PostgreSQL 把 %f 展开为请求文件、%p 展开为目标路径。成功必须表示准确文件已可靠复制;正常的未找到应返回非零,以便继续尝试流复制或 pg_wal,同时 shell 引用必须安全。

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

调优建议

提示

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

场景 建议
OLTP 把 restore_command 作为备份/恢复协议的一部分管理:命令或模块必须幂等、失败可见,并通过从真实归档恢复来验证,而不是只看返回码。
OLAP 按批量装载 WAL 峰值配置归档吞吐与容量;归档跟不上时节流任务并报警,不能用虚假成功或激进清理掩盖积压。
小规格 有明确 PITR 需求才启用并交给成熟备份工具;可重建实例保持简单,但不要留下占位命令制造“已备份”的错觉。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG12–19 Beta 3 未修改;OLAP: PG12–19 Beta 3 未修改;CRIT: PG12–19 Beta 3 未修改;TINY: PG12–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 缺失或错误 WAL 文件也返回零。
  • 没有安全引用 %f 与 %p。
  • 归档可能返回另一时间线或集群的同名段。
  • 混淆 pg_settings 的原始单位与配置文件可读单位。
  • 只做吞吐基准,不做崩溃恢复与归档还原。

archive_mode · archive_command · archive_library · archive_timeout · archive_cleanup_command · recovery_end_command

参考资料

28 - summarize_wal

summarize_wal:启动 WAL summarizer 进程以支持增量备份。它是 PG17–18 的 sighup 参数;最新实测启动默认值为 off。
说明

Fact — 官方简述译文:启动 WAL summarizer 进程以支持增量备份。

身份

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

生命周期

Fact
首次观测 PG17
在档版本 PG17–19 Beta 3
移除版本
引入提交 174c480508ac — Add a new WAL summarizer process.
提交日期 2023-12-20
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG17–19 Beta 3 off off

机制详解

启动 WAL summarizer 进程以支持增量备份。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

WAL summarizer 记录各 WAL 范围修改过的块,让 pg_basebackup 能构造增量备份。它可在主库或备库运行,但无法汇总以 wal_level=minimal 生成的 WAL。

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

调优建议

提示

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

场景 建议
OLTP 只有采用 PostgreSQL 增量备份时才启用/调整 summarize_wal;监控 summarizer 进度,并让摘要覆盖任何相邻基础/增量备份之间的完整 WAL 范围。
OLAP 批量写入会增加摘要工作;把备份间隔、WAL 峰值和备份窗口一起做容量测试,摘要缺口会使增量备份失败。
小规格 不做增量备份就保持 summarize_wal 关闭;若启用,保留期要由实际备份链决定,并给摘要目录设置容量告警。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG17–19 Beta 3 未修改;OLAP: PG17–19 Beta 3 未修改;CRIT: PG17–19 Beta 3 未修改;TINY: PG17–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 在 wal_level=minimal 下启用,却期待生成可用摘要。
  • 把 WAL 摘要本身当作 WAL 归档或备份。
  • 关闭 summarizer 后仍期待 wal_summary_keep_time 继续清理。
  • 未检查 summarizer 进度与摘要覆盖范围就执行增量备份。

wal_summary_keep_time · wal_level · archive_mode · max_wal_size · archive_cleanup_command · archive_command

参考资料

29 - synchronous_commit

synchronous_commit:设置当前事务提交时使用的同步级别。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 on,context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置当前事务提交时使用的同步级别。

身份

类型 , enum
上游 pg_settings 类型
Context , user
普通用户可在运行时修改
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 , local, remote_write, remote_apply, on, off
非枚举类型记为 —
分类 , Write-Ahead Log / Settings
上游分类
最后 boot 值 , on
on

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 on on

机制详解

除 off 外的所有模式都会等待本地 WAL 刷入持久存储。off 可以在本地持久化之前返回成功;崩溃可能丢失最近已确认的事务,但恢复后的数据库仍保持事务一致性,不会产生 fsync = off 那类结构损坏风险。

当 synchronous_standby_names 选定同步备库时,remote_write 等待备库接收并写入操作系统,on 等待备库持久化刷新,remote_apply 还要等待重放并对查询可见;local 只等待本地持久化。如果没有选中同步备库,这些远程模式不会增加远程保证。

事务采用提交开始时生效的值。应用可以对单个事务使用 SET LOCAL,使关键事务和可重建事务在同一服务器上采用不同持久性策略。

调优建议

提示

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

场景 建议
OLTP 全局默认保持 on。仅对明确可重建的事务使用 off;只有提交后必须立即在同步备库读到结果时才使用 remote_apply,并把网络往返和备库健康纳入延迟预算。
OLAP 可重复执行的批量导入可在事务内使用 off,前提是能够接受最后一小段未刷盘数据丢失并可重跑。目录变更、交接标记和对外宣布完成的记录仍应同步提交。
小规格 保持 on。小型系统通常得不到足以抵消语义风险的全局降级收益,应只优化个别非关键任务。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 未修改;OLAP: PG9.0–19 Beta 3 未修改;CRIT: PG9.0–19 Beta 3 未修改;TINY: PG9.0–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 把 synchronous_commit = off 与 fsync = off 混为一谈;前者风险是近期数据丢失,不是结构损坏。
  • 没有选定同步备库时仍期待 remote_write、on 或 remote_apply 提供远程等待。
  • 使用 remote_write 却假设备库能抵御操作系统崩溃。
  • 同步备库不可用时没有 HA 处置方案,导致提交无限等待。
  • 连接池中使用会话级 SET 而未使用 SET LOCAL 或重置纪律,造成设置泄漏。

synchronous_standby_names · fsync · wal_writer_delay · wal_sync_method · commit_delay · wal_level

参考资料

30 - wal_buffers

wal_buffers:设置共享内存中用于 WAL 的磁盘页缓冲区数量。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 -1 8kB,context 为 postmaster。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置共享内存中用于 WAL 的磁盘页缓冲区数量。

身份

类型 , integer
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 , 8kB
原始单位
范围 , -1262143
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Settings
上游分类
最后 boot 值 , -1
-1 8kB

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0 8 8kB 64 KiB (8 × 8kB)
PG9.1–19 Beta 3 -1 8kB -1 8kB

机制详解

设置共享内存中用于 WAL 的磁盘页缓冲区数量。该值在服务器启动时固定,修改后必须重启。

自动值 -1 选择约 shared_buffers 的 1/32,并受最低值与一个 WAL 段上限约束。缓冲区吸收写出前的 WAL;过小会在突发中增加 WALWrite 压力,过大则占启动共享内存且不能替代持久化刷写。

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

调优建议

提示

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

场景 建议
OLTP 先保证耐久性与恢复目标,再以 WAL 生成速率、刷写延迟、检查点和 pg_wal 峰值调 wal_buffers;每次改动都做崩溃/恢复与归档监控验证。
OLAP 按批量装载峰值规划 WAL、归档带宽和恢复 I/O;需要降低峰值时应协调装载节奏与检查点,而不是牺牲恢复链。
小规格 从安全默认或实测 Pigsty 值开始,按有限磁盘容量设置明确告警;不要仅为节省少量 I/O 就关闭耐久性或破坏恢复链。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 16MB 不同于 boot 值 16MB
OLAP 16MB 不同于 boot 值 16MB
CRIT 16MB 不同于 boot 值 16MB
TINY 16MB 不同于 boot 值 16MB
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 16MB (dcs);OLAP: PG9.0–19 Beta 3 = 16MB (dcs);CRIT: PG9.0–19 Beta 3 = 16MB (dcs);TINY: PG9.0–19 Beta 3 = 16MB (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在显式使用通常为一个 WAL 段的上限来吸收突发;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 把 -1 读成负分配,而不是自动尺寸。
  • 忘记自动值依据 shared_buffers 计算,并以一个 WAL 段为上限。
  • 把未带单位的正值读成字节,而不是 WAL 块;过小正值会提升到最低值。
  • 没有 WALInsert/WALWrite 压力证据就手工分配很大缓冲。
  • 误以为更多 WAL buffer 能替代持久刷盘或改善受存储限制的 WALSync。

fsync · full_page_writes · wal_sync_method · synchronous_commit · wal_writer_delay · wal_writer_flush_after

参考资料

31 - wal_compression

wal_compression:使用指定方法压缩写入 WAL 的整页映像。实测在档范围为 PG9.5–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 off,context 为 superuser。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:使用指定方法压缩写入 WAL 的整页映像。

身份

类型 , enum
上游 pg_settings 类型
Context , superuser
超级用户可在运行时修改
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 , pglz, lz4, zstd, on, off
非枚举类型记为 —
分类 , Write-Ahead Log / Settings
上游分类
最后 boot 值 , off
off

生命周期

Fact
首次观测 PG9.5
在档版本 PG9.5–19 Beta 3
移除版本
引入提交 57aa5b2bb11a — Add GUC to enable compression of full page images stored in WAL.
提交日期 2015-03-11
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.5–19 Beta 3 off off

机制详解

使用指定方法压缩写入 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;历史默认值并不等于当前有效值。

调优建议

提示

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

场景 建议
OLTP 先保证耐久性与恢复目标,再以 WAL 生成速率、刷写延迟、检查点和 pg_wal 峰值调 wal_compression;每次改动都做崩溃/恢复与归档监控验证。
OLAP 按批量装载峰值规划 WAL、归档带宽和恢复 I/O;需要降低峰值时应协调装载节奏与检查点,而不是牺牲恢复链。
小规格 从安全默认或实测 Pigsty 值开始,按有限磁盘容量设置明确告警;不要仅为节省少量 I/O 就关闭耐久性或破坏恢复链。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP lz4 不同于 boot 值 lz4
OLAP lz4 不同于 boot 值 lz4
CRIT lz4 不同于 boot 值 lz4
TINY lz4 不同于 boot 值 lz4
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.5–14 未修改, PG15–19 Beta 3 = lz4 (dcs);OLAP: PG9.5–14 未修改, PG15–19 Beta 3 = lz4 (dcs);CRIT: PG9.5–14 未修改, PG15–19 Beta 3 = lz4 (dcs);TINY: PG9.5–14 未修改, PG15–19 Beta 3 = lz4 (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在在支持枚举压缩方法的版本上用 LZ4 降低整页映像 WAL 量;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

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

full_page_writes · wal_log_hints · wal_level · wal_buffers · commit_delay · commit_siblings

参考资料

32 - wal_decode_buffer_size

wal_decode_buffer_size:设置恢复期间超前读取 WAL 的缓冲区大小。它是 PG15–18 的 postmaster 参数;最新实测启动默认值为 512 KiB。
说明

Fact — 官方简述译文:设置恢复期间超前读取 WAL 的缓冲区大小。

身份

类型 , integer
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 , B
原始单位
范围 , 655361073741823
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Recovery
上游分类
最后 boot 值 , 524288
512 KiB

生命周期

Fact
首次观测 PG15
在档版本 PG15–19 Beta 3
移除版本
引入提交 1d257577e08d — Optionally prefetch referenced data in recovery.
提交日期 2021-04-08
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG15–19 Beta 3 524288 B 512 KiB

机制详解

设置恢复期间超前读取 WAL 的缓冲区大小。该值在服务器启动时固定,修改后必须重启。

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

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

调优建议

提示

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

场景 建议
OLTP 在与生产相同的存储上用恢复/备库追赶基准调 wal_decode_buffer_size,同时观察 replay I/O wait、缓存命中与 maintenance_io_concurrency;没有测量收益就保留默认。
OLAP 大型数据集且随机读取较慢时可能收益更大,但过度预取会挤占查询 I/O 与缓存;在故障恢复与读备库两种场景分别测试。
小规格 默认通常足够。内存与 I/O 队列有限时,不要为扩大超前窗口占用资源,除非恢复时间目标有明确缺口。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG15–19 Beta 3 未修改;OLAP: PG15–19 Beta 3 未修改;CRIT: PG15–19 Beta 3 未修改;TINY: PG15–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 混淆 pg_settings 的原始单位与配置文件可读单位。
  • 只做吞吐基准,不做崩溃恢复与归档还原。
  • 忽略检查点、复制槽或归档失败造成的联动。
  • 在需要 restart 的参数上只 reload 就认为已生效。

recovery_prefetch · maintenance_io_concurrency · effective_io_concurrency · shared_buffers · archive_cleanup_command · archive_command

参考资料

33 - wal_init_zero

wal_init_zero:新 WAL 文件首次使用前先写零。它是 PG12–18 的 superuser 参数;最新实测启动默认值为 on。
说明

Fact — 官方简述译文:新 WAL 文件首次使用前先写零。

身份

类型 , bool
上游 pg_settings 类型
Context , superuser
超级用户可在运行时修改
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Settings
上游分类
最后 boot 值 , on
on

生命周期

Fact
首次观测 PG12
在档版本 PG12–19 Beta 3
移除版本
引入提交 475861b2615d — Add wal_recycle and wal_init_zero GUCs.
提交日期 2019-04-02
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG12–19 Beta 3 on on

机制详解

新 WAL 文件首次使用前先写零。超级用户或获授 SET 权限的角色可在相应的会话或配置作用域中修改它。

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

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

调优建议

提示

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

场景 建议
OLTP 先保证耐久性与恢复目标,再以 WAL 生成速率、刷写延迟、检查点和 pg_wal 峰值调 wal_init_zero;每次改动都做崩溃/恢复与归档监控验证。
OLAP 按批量装载峰值规划 WAL、归档带宽和恢复 I/O;需要降低峰值时应协调装载节奏与检查点,而不是牺牲恢复链。
小规格 从安全默认或实测 Pigsty 值开始,按有限磁盘容量设置明确告警;不要仅为节省少量 I/O 就关闭耐久性或破坏恢复链。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG12–19 Beta 3 未修改;OLAP: PG12–19 Beta 3 未修改;CRIT: PG12–19 Beta 3 未修改;TINY: PG12–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 在传统文件系统上关闭写零,把空间分配停顿推到 WAL 峰值创建阶段。
  • 在写时复制存储上保留写零,却未测量分配与碎片成本。
  • 看到稀疏文件就误以为 PostgreSQL 改变了 wal_segment_size。
  • 修改会话值后,期待已经创建的 WAL 段被重写。

wal_recycle · wal_segment_size · min_wal_size · max_wal_size · commit_delay · commit_siblings

参考资料

34 - wal_level

wal_level:设置写入 WAL 的信息级别。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 replica,context 为 postmaster。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置写入 WAL 的信息级别。

身份

类型 , enum
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 , minimal, replica, logical
非枚举类型记为 —
分类 , Write-Ahead Log / Settings
上游分类
最后 boot 值 , replica
replica

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–9.6 minimal minimal
PG10–19 Beta 3 replica replica

机制详解

设置写入 WAL 的信息级别。该值在服务器启动时固定,修改后必须重启。

minimal 只记录崩溃恢复所需信息,不能支持要求 replica 信息的归档/流复制;replica 支持物理复制与归档恢复;logical 再增加逻辑解码信息。修改必须重启,并可能改变 WAL 量。

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

调优建议

提示

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

场景 建议
OLTP 先保证耐久性与恢复目标,再以 WAL 生成速率、刷写延迟、检查点和 pg_wal 峰值调 wal_level;每次改动都做崩溃/恢复与归档监控验证。
OLAP 按批量装载峰值规划 WAL、归档带宽和恢复 I/O;需要降低峰值时应协调装载节奏与检查点,而不是牺牲恢复链。
小规格 从安全默认或实测 Pigsty 值开始,按有限磁盘容量设置明确告警;不要仅为节省少量 I/O 就关闭耐久性或破坏恢复链。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP logical 不同于 boot 值 logical
OLAP logical 不同于 boot 值 logical
CRIT logical 不同于 boot 值 logical
TINY logical 不同于 boot 值 logical
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = logical (dcs);OLAP: PG9.0–19 Beta 3 = logical (dcs);CRIT: PG9.0–19 Beta 3 = logical (dcs);TINY: PG9.0–19 Beta 3 = logical (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在让所有 Pigsty profile 默认具备逻辑解码能力;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 选择 minimal 却仍期待归档、流复制或逻辑解码。
  • 提高级别却不预算额外 WAL 与重启。
  • 槽/订阅仍依赖高级别时就降低。
  • 混淆 pg_settings 的原始单位与配置文件可读单位。
  • 只做吞吐基准,不做崩溃恢复与归档还原。

wal_compression · full_page_writes · wal_log_hints · wal_buffers · max_wal_senders · max_replication_slots

参考资料

35 - wal_log_hints

wal_log_hints:页面在检查点后首次发生非关键修改时也将完整页面写入 WAL。实测在档范围为 PG9.4–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 off,context 为 postmaster。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:页面在检查点后首次发生非关键修改时也将完整页面写入 WAL。

身份

类型 , bool
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Settings
上游分类
最后 boot 值 , off
off

生命周期

Fact
首次观测 PG9.4
在档版本 PG9.4–19 Beta 3
移除版本
引入提交 961bf59fb7a7 — Rename wal_log_hintbits to wal_log_hints, per discussion on pgsql-hackers.
提交日期 2013-12-21
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.4–19 Beta 3 off off

机制详解

页面在检查点后首次发生非关键修改时也将完整页面写入 WAL。该值在服务器启动时固定,修改后必须重启。

未启用数据校验和时,它让检查点后第一次 hint bit 修改也记录整页 WAL,为 pg_rewind 提供所需块变化安全性。启用校验和后等价日志本就发生,因此该开关不再增加效果。

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

调优建议

提示

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

场景 建议
OLTP 先保证耐久性与恢复目标,再以 WAL 生成速率、刷写延迟、检查点和 pg_wal 峰值调 wal_log_hints;每次改动都做崩溃/恢复与归档监控验证。
OLAP 按批量装载峰值规划 WAL、归档带宽和恢复 I/O;需要降低峰值时应协调装载节奏与检查点,而不是牺牲恢复链。
小规格 从安全默认或实测 Pigsty 值开始,按有限磁盘容量设置明确告警;不要仅为节省少量 I/O 就关闭耐久性或破坏恢复链。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP on 不同于 boot 值 'on'
OLAP on 不同于 boot 值 'on'
CRIT on 不同于 boot 值 'on'
TINY on 不同于 boot 值 'on'
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.4–19 Beta 3 = on (dcs);OLAP: PG9.4–19 Beta 3 = on (dcs);CRIT: PG9.4–19 Beta 3 = on (dcs);TINY: PG9.4–19 Beta 3 = on (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在即使未由数据校验和强制记录 hint bit WAL,也保持 pg_rewind 可用;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 混淆 pg_settings 的原始单位与配置文件可读单位。
  • 只做吞吐基准,不做崩溃恢复与归档还原。
  • 忽略检查点、复制槽或归档失败造成的联动。
  • 在需要 restart 的参数上只 reload 就认为已生效。

wal_compression · full_page_writes · wal_level · wal_buffers · max_wal_senders · max_replication_slots

参考资料

36 - wal_recycle

wal_recycle:通过重命名复用 WAL 文件。它是 PG12–18 的 superuser 参数;最新实测启动默认值为 on。
说明

Fact — 官方简述译文:通过重命名复用 WAL 文件。

身份

类型 , bool
上游 pg_settings 类型
Context , superuser
超级用户可在运行时修改
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Settings
上游分类
最后 boot 值 , on
on

生命周期

Fact
首次观测 PG12
在档版本 PG12–19 Beta 3
移除版本
引入提交 475861b2615d — Add wal_recycle and wal_init_zero GUCs.
提交日期 2019-04-02
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG12–19 Beta 3 on on

机制详解

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

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

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

调优建议

提示

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

场景 建议
OLTP 先保证耐久性与恢复目标,再以 WAL 生成速率、刷写延迟、检查点和 pg_wal 峰值调 wal_recycle;每次改动都做崩溃/恢复与归档监控验证。
OLAP 按批量装载峰值规划 WAL、归档带宽和恢复 I/O;需要降低峰值时应协调装载节奏与检查点,而不是牺牲恢复链。
小规格 从安全默认或实测 Pigsty 值开始,按有限磁盘容量设置明确告警;不要仅为节省少量 I/O 就关闭耐久性或破坏恢复链。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG12–19 Beta 3 未修改;OLAP: PG12–19 Beta 3 未修改;CRIT: PG12–19 Beta 3 未修改;TINY: PG12–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

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

wal_init_zero · wal_segment_size · min_wal_size · max_wal_size · commit_delay · commit_siblings

参考资料

37 - wal_skip_threshold

wal_skip_threshold:设置用 fsync 新文件代替写 WAL 的最小文件规模。它是 PG13–18 的 user 参数;最新实测启动默认值为 2 MiB。
说明

Fact — 官方简述译文:设置用 fsync 新文件代替写 WAL 的最小文件规模。

身份

类型 , integer
上游 pg_settings 类型
Context , user
普通用户可在运行时修改
单位 , kB
原始单位
范围 , 02147483647
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Settings
上游分类
最后 boot 值 , 2048
2 MiB

生命周期

Fact
首次观测 PG13
在档版本 PG13–19 Beta 3
移除版本
引入提交 cb2fd7eac285 — Skip WAL for new relfilenodes, under wal_level=minimal.
提交日期 2020-03-21
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG13–19 Beta 3 2048 kB 2 MiB

机制详解

设置用 fsync 新文件代替写 WAL 的最小文件规模。它可在会话级修改,因此不同会话可能采用不同的行为。

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

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

调优建议

提示

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

场景 建议
OLTP 先保证耐久性与恢复目标,再以 WAL 生成速率、刷写延迟、检查点和 pg_wal 峰值调 wal_skip_threshold;每次改动都做崩溃/恢复与归档监控验证。
OLAP 按批量装载峰值规划 WAL、归档带宽和恢复 I/O;需要降低峰值时应协调装载节奏与检查点,而不是牺牲恢复链。
小规格 从安全默认或实测 Pigsty 值开始,按有限磁盘容量设置明确告警;不要仅为节省少量 I/O 就关闭耐久性或破坏恢复链。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG13–19 Beta 3 未修改;OLAP: PG13–19 Beta 3 未修改;CRIT: PG13–19 Beta 3 未修改;TINY: PG13–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 在 wal_level=replica 或 logical 下调优;此时该参数没有作用。
  • 把它应用到普通行修改,而它只涉及新建或重写的关系文件。
  • 把未带单位的值读成字节,而不是 kB。
  • 未基于真实存储与并发提交影响测试,就在 fsync 与写 WAL 之间作选择。

commit_delay · commit_siblings · fsync · full_page_writes · synchronous_commit · wal_buffers

参考资料

38 - wal_summary_keep_time

wal_summary_keep_time:设置 WAL 摘要文件的保留时间。它是 PG17–18 的 sighup 参数;最新实测启动默认值为 10 d。
说明

Fact — 官方简述译文:设置 WAL 摘要文件的保留时间。

身份

类型 , integer
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 , min
原始单位
范围 , 035791394
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Summarization
上游分类
最后 boot 值 , 14400
10 d

生命周期

Fact
首次观测 PG17
在档版本 PG17–19 Beta 3
移除版本
引入提交 174c480508ac — Add a new WAL summarizer process.
提交日期 2023-12-20
Discussion 讨论 1

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG17–19 Beta 3 14400 min 10 d

机制详解

设置 WAL 摘要文件的保留时间。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

summarizer 按文件时间戳删除超过该年龄的摘要。保留期必须长于一次增量备份与其依赖的先前备份之间的最长间隔;零表示无限保留,summarize_wal 关闭时也不会清理。

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

调优建议

提示

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

场景 建议
OLTP 只有采用 PostgreSQL 增量备份时才启用/调整 wal_summary_keep_time;监控 summarizer 进度,并让摘要覆盖任何相邻基础/增量备份之间的完整 WAL 范围。
OLAP 批量写入会增加摘要工作;把备份间隔、WAL 峰值和备份窗口一起做容量测试,摘要缺口会使增量备份失败。
小规格 不做增量备份就保持 summarize_wal 关闭;若启用,保留期要由实际备份链决定,并给摘要目录设置容量告警。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG17–19 Beta 3 未修改;OLAP: PG17–19 Beta 3 未修改;CRIT: PG17–19 Beta 3 未修改;TINY: PG17–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 删除连接前后两次增量备份仍需要的摘要。
  • 设为零却不监控无界增长。
  • 关闭 summarize_wal 后仍期待保留清理继续。
  • 混淆 pg_settings 的原始单位与配置文件可读单位。
  • 只做吞吐基准,不做崩溃恢复与归档还原。

summarize_wal · wal_level · archive_mode · max_wal_size · archive_cleanup_command · archive_command

参考资料

39 - wal_sync_method

wal_sync_method:选择将 WAL 更新强制写入磁盘的方法。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 fdatasync,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:选择将 WAL 更新强制写入磁盘的方法。

身份

类型 , enum
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 , fsync, fdatasync, open_sync, open_datasync
非枚举类型记为 —
分类 , Write-Ahead Log / Settings
上游分类
最后 boot 值 , fdatasync
fdatasync

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 fdatasync fdatasync

机制详解

选择将 WAL 更新强制写入磁盘的方法。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

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

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

调优建议

提示

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

场景 建议
OLTP 先保证耐久性与恢复目标,再以 WAL 生成速率、刷写延迟、检查点和 pg_wal 峰值调 wal_sync_method;每次改动都做崩溃/恢复与归档监控验证。
OLAP 按批量装载峰值规划 WAL、归档带宽和恢复 I/O;需要降低峰值时应协调装载节奏与检查点,而不是牺牲恢复链。
小规格 从安全默认或实测 Pigsty 值开始,按有限磁盘容量设置明确告警;不要仅为节省少量 I/O 就关闭耐久性或破坏恢复链。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 未修改
OLAP 未修改
CRIT 未修改
TINY 未修改
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 未修改;OLAP: PG9.0–19 Beta 3 未修改;CRIT: PG9.0–19 Beta 3 未修改;TINY: PG9.0–19 Beta 3 未修改。 未发现覆盖值,因此不推断 Pigsty 专属理由。

常见坑

  • 选择操作系统或文件系统不支持的同步方法。
  • 在与生产不同的内核、挂载参数或存储缓存上做基准。
  • 混淆写吞吐与持久同步延迟。
  • 修改方法却不做崩溃或掉电耐久性测试。
  • 误以为数据文件上最快的方法也一定最适合 WAL。

fsync · full_page_writes · synchronous_commit · wal_buffers · wal_writer_delay · commit_delay

参考资料

40 - wal_writer_delay

wal_writer_delay:设置 WAL writer 两次刷写之间的时间。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 200 ms,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 WAL writer 两次刷写之间的时间。

身份

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

生命周期

Fact
首次观测 PG9.0(研究下界)
在档版本 PG9.0–19 Beta 3
移除版本
引入提交 不作断言:早于 PG9.0 研究边界
提交日期
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.0–19 Beta 3 200 ms 200 ms

机制详解

设置 WAL writer 两次刷写之间的时间。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

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

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

调优建议

提示

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

场景 建议
OLTP 先保证耐久性与恢复目标,再以 WAL 生成速率、刷写延迟、检查点和 pg_wal 峰值调 wal_writer_delay;每次改动都做崩溃/恢复与归档监控验证。
OLAP 按批量装载峰值规划 WAL、归档带宽和恢复 I/O;需要降低峰值时应协调装载节奏与检查点,而不是牺牲恢复链。
小规格 从安全默认或实测 Pigsty 值开始,按有限磁盘容量设置明确告警;不要仅为节省少量 I/O 就关闭耐久性或破坏恢复链。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 20ms 不同于 boot 值 20ms
OLAP 20ms 不同于 boot 值 20ms
CRIT 10ms 不同于 boot 值 10ms
TINY 20ms 不同于 boot 值 20ms
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 20ms (dcs);OLAP: PG9.0–19 Beta 3 = 20ms (dcs);CRIT: PG9.0–19 Beta 3 = 10ms (dcs);TINY: PG9.0–19 Beta 3 = 20ms (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在让 WAL 更频繁地由后台移出前台后端,CRIT 采用更短节奏;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 把间隔当成严格的提交刷盘期限;writer 可提前唤醒,前台提交也可独立刷盘。
  • 设置过低,产生过多唤醒与小写入开销。
  • 设置过高,把更多 WAL 写入推回前台后端。
  • 解释写出与持久刷盘时机时忽略 wal_writer_flush_after。
  • 使用异步提交却没有为可能的数据丢失窗口做预算。

fsync · full_page_writes · wal_sync_method · synchronous_commit · wal_buffers · commit_delay

参考资料

41 - wal_writer_flush_after

wal_writer_flush_after:设置触发 WAL writer 刷盘的写出 WAL 数量。实测在档范围为 PG9.6–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 1 MiB (128 × 8kB),context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置触发 WAL writer 刷盘的写出 WAL 数量。

身份

类型 , integer
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 , 8kB
原始单位
范围 , 02147483647
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Write-Ahead Log / Settings
上游分类
最后 boot 值 , 128
1 MiB (128 × 8kB)

生命周期

Fact
首次观测 PG9.6
在档版本 PG9.6–19 Beta 3
移除版本
引入提交 7975c5e0a992 — Allow the WAL writer to flush WAL at a reduced rate.
提交日期 2016-02-15
Discussion

默认值变迁

PG9.0–19 Beta 3 实测 boot 默认值
版本 原始 boot_val 单位 人类可读值
PG9.6–19 Beta 3 128 8kB 1 MiB (128 × 8kB)

机制详解

设置触发 WAL writer 刷盘的写出 WAL 数量。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

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

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

调优建议

提示

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

场景 建议
OLTP 先保证耐久性与恢复目标,再以 WAL 生成速率、刷写延迟、检查点和 pg_wal 峰值调 wal_writer_flush_after;每次改动都做崩溃/恢复与归档监控验证。
OLAP 按批量装载峰值规划 WAL、归档带宽和恢复 I/O;需要降低峰值时应协调装载节奏与检查点,而不是牺牲恢复链。
小规格 从安全默认或实测 Pigsty 值开始,按有限磁盘容量设置明确告警;不要仅为节省少量 I/O 就关闭耐久性或破坏恢复链。

Pigsty 取值

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

模板 有效值 与上游 boot 比较 源表达式
OLTP 1MB 等于 boot 值 1MB
OLAP 1MB 等于 boot 值 1MB
CRIT 0 不同于 boot 值 0
TINY 1MB 等于 boot 值 1MB
注意

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.6–19 Beta 3 = 1MB (dcs);OLAP: PG9.6–19 Beta 3 = 1MB (dcs);CRIT: PG9.6–19 Beta 3 = 0 (dcs);TINY: PG9.6–19 Beta 3 = 1MB (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在让 WAL writer 按 1 MiB 批量刷盘,而 CRIT 要求立即刷盘;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 把未带单位的值读成字节,而不是 WAL 块。
  • 忘记零表示 WAL writer 立即请求刷盘。
  • 选择大批量,却不考虑异步提交的数据丢失暴露与脏 WAL。
  • 把该参数当作同步提交刷盘的替代品。
  • 不结合 wal_writer_delay 与存储刷盘延迟就调优。

wal_buffers · wal_writer_delay · wal_sync_method · synchronous_commit · commit_delay · commit_siblings

参考资料