跳转到主要内容

1 - autovacuum

Autovacuum 通过后台调度 VACUUM 与 ANALYZE 维持 MVCC 表的可用状态。它既是性能机制,也是防止事务号回卷的安全网,并非可有可无的清洁任务。
说明

Fact — 官方简述译文:控制 PostgreSQL 是否运行自动清理启动器。

身份

类型 , bool
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Automatic Vacuuming
上游分类
最后 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

机制详解

启用后,一个 launcher 在各数据库之间协调多个 worker。Worker 依据累计的表变更统计判断是否执行 VACUUM 或 ANALYZE,因此普通自动清理还依赖 track_counts 开启。

常规触发条件响应插入、更新与删除产生的变更。除此之外,即使关闭本参数,PostgreSQL 仍会在必要时启动防回卷 autovacuum,因为旧事务号或 multixact 回卷会威胁数据正确性。

多数触发阈值与成本参数可通过表级 storage parameter 覆盖。临时表无法由 autovacuum 访问;分区会被正常处理,但分区父表仍可能需要手工 ANALYZE。

调优建议

提示

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

场景 建议
OLTP 保持开启。优先按热点表单独调优,并结合死元组、autovacuum 时长、worker 被取消情况和 XID 年龄判断是否需要全局加速。
OLAP 为安全起见保持开启,但应与批量装载窗口协调;大批导入后主动 ANALYZE,需要父表统计时对分区父表单独执行 ANALYZE。
小规格 保持默认开启。若资源紧张,优先减少 worker 或降低特定表的积极程度,不要仅为节省少量后台活动而关闭 launcher。

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 专属理由。

常见坑

  • 关闭它并不会关闭紧急的防回卷 autovacuum。
  • 普通 autovacuum 决策依赖 track_counts。
  • 长事务和陈旧复制槽可能让 worker 即使成功运行也无法回收旧版本。
  • 仅有分区发生变化时,autovacuum 不会自动分析分区父表。
  • 临时表必须由持有它的会话自行维护。

autovacuum_max_workers · autovacuum_naptime · autovacuum_vacuum_scale_factor · autovacuum_analyze_scale_factor · autovacuum_freeze_max_age · track_counts

参考资料

2 - autovacuum_analyze_scale_factor

autovacuum_analyze_scale_factor:以 reltuples 的比例设置触发 ANALYZE 前的元组插入、更新或删除数量。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 0.1,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:以 reltuples 的比例设置触发 ANALYZE 前的元组插入、更新或删除数量。

身份

类型 , real
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 , 0100
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Automatic Vacuuming
上游分类
最后 boot 值 , 0.1
0.1

生命周期

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.1 0.1

机制详解

以 reltuples 的比例设置触发 ANALYZE 前的元组插入、更新或删除数量。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

自动 ANALYZE 的触发量由固定项 autovacuum_analyze_threshold 加上 autovacuum_analyze_scale_factor × pg_class.reltuples 组成;插入、更新与删除都计入累计统计。表级 storage parameter 可覆盖全局值,统计是最终一致的估计。

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

调优建议

提示

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

场景 建议
OLTP 根据表大小、变更速率与维护 SLA 调 autovacuum_analyze_scale_factor,大表优先使用表级阈值;观察触发间隔、死元组和 ANALYZE/VACUUM 时长。
OLAP 批量装载后主动 ANALYZE/VACUUM,不要只等待比例阈值;对 append-only 分区单独规划冻结与 visibility map 推进。
小规格 先保持默认或 Pigsty 矩阵值;小表固定阈值比比例项更重要,修改后确认 worker 数量和 I/O 仍有余量。

Pigsty 取值

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

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

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 0.04 (dcs);OLAP: PG9.0–19 Beta 3 = 0.04 (dcs);CRIT: PG9.0–19 Beta 3 = 0.04 (dcs);TINY: PG9.0–19 Beta 3 未修改。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在让持续增长的生产表更早刷新优化器统计;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

autovacuum_analyze_threshold · default_statistics_target · track_counts · autovacuum · autovacuum_freeze_max_age · autovacuum_max_workers

参考资料

3 - autovacuum_analyze_score_weight

autovacuum_analyze_score_weight:设置 autovacuum 优先级中 ANALYZE 得分的缩放系数。实测在档范围为 PG19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 1,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 autovacuum 优先级中 ANALYZE 得分的缩放系数。

身份

类型 , real
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 , 010
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Automatic Vacuuming
上游分类
最后 boot 值 , 1
1

生命周期

Fact
首次观测 PG19 Beta 3
在档版本 PG19 Beta 3
移除版本
引入提交 d7965d65fc5b — Add rudimentary table prioritization to autovacuum.
提交日期 2026-03-27
Discussion 讨论 1

默认值变迁

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

机制详解

autovacuum_analyze_score_weight:设置 autovacuum 优先级中 ANALYZE 得分的缩放系数。重新加载配置即可让服务器采用新值,无需完整重启。 本站在 PG19 Beta 3 实测到它;boot_val 是编译或初始化基线,并不能证明某个运行集群的当前有效值。

PostgreSQL 19 会为每个候选表计算得分,并按加权分量的最大值安排工作。该参数乘在ANALYZE 变更压力分量上:大于 1 会提高其调度影响,0 到 1 会降低影响;把全部得分权重设为 0 可恢复 PG19 之前按目录顺序处理的策略。可通过 pg_stat_autovacuum_scores 检查各分量。

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

调优建议

提示

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

场景 建议
OLTP 先使用上游默认值,再依据 pg_stat_autovacuum_scores、表变更量、冻结年龄、排队与前台延迟决定是否修改。必须保护防回卷任务,避免偏爱忙表而饿死低流量表。
OLAP 批处理环境可能受益于优先处理最大维护债务或并行清理索引,但必须衡量整个维护窗口的 I/O 饱和、维护内存、worker 竞争与完成时间。
小规格 权重和并行度应保守;一个额外 worker 就可能占据很大比例的 CPU、内存与存储队列。先修正阈值,并确保 autovacuum 有足够时间完成。

Pigsty 取值

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

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

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

常见坑

  • 把 autovacuum_analyze_score_weight 的实测 boot_val 当成初始化后或托管集群当前有效值的证明。
  • 忽略 pg_settings 报告的 sighup context,误以为修改会立即生效。
  • 孤立修改该参数,没有检查关联上限、可观测性和回滚路径。
  • 在生产中依赖测试版行为,却没有在 PostgreSQL 19 正式版发布后重新验证。

autovacuum_freeze_score_weight · autovacuum_multixact_freeze_score_weight · autovacuum_vacuum_score_weight · autovacuum_vacuum_insert_score_weight · autovacuum_max_workers · autovacuum_naptime

参考资料

4 - autovacuum_analyze_threshold

autovacuum_analyze_threshold:设置触发 ANALYZE 前元组插入、更新或删除数量的最低阈值。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 50,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置触发 ANALYZE 前元组插入、更新或删除数量的最低阈值。

身份

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

生命周期

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

默认值变迁

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

机制详解

设置触发 ANALYZE 前元组插入、更新或删除数量的最低阈值。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

自动 ANALYZE 的触发量由固定项 autovacuum_analyze_threshold 加上 autovacuum_analyze_scale_factor × pg_class.reltuples 组成;插入、更新与删除都计入累计统计。表级 storage parameter 可覆盖全局值,统计是最终一致的估计。

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

调优建议

提示

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

场景 建议
OLTP 根据表大小、变更速率与维护 SLA 调 autovacuum_analyze_threshold,大表优先使用表级阈值;观察触发间隔、死元组和 ANALYZE/VACUUM 时长。
OLAP 批量装载后主动 ANALYZE/VACUUM,不要只等待比例阈值;对 append-only 分区单独规划冻结与 visibility map 推进。
小规格 先保持默认或 Pigsty 矩阵值;小表固定阈值比比例项更重要,修改后确认 worker 数量和 I/O 仍有余量。

Pigsty 取值

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

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

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 250 (dcs);OLAP: PG9.0–19 Beta 3 = 500 (dcs);CRIT: PG9.0–19 Beta 3 = 250 (dcs);TINY: PG9.0–19 Beta 3 = 250 (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在避免极小变更就分析,同时给 OLAP 更大的固定门槛;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

autovacuum_analyze_scale_factor · default_statistics_target · track_counts · autovacuum · autovacuum_freeze_max_age · autovacuum_max_workers

参考资料

5 - autovacuum_freeze_max_age

autovacuum_freeze_max_age:设置为防止事务 ID 回卷而强制自动清理表的年龄。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 200000000,context 为 postmaster。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置为防止事务 ID 回卷而强制自动清理表的年龄。

身份

类型 , integer
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 , 1000002000000000
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Automatic Vacuuming
上游分类
最后 boot 值 , 200000000
200000000

生命周期

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

默认值变迁

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

机制详解

设置为防止事务 ID 回卷而强制自动清理表的年龄。该值在服务器启动时固定,修改后必须重启。

当表的 relfrozenxid 年龄越过该上限时,即使普通 autovacuum 已关闭,也会安排不可轻易取消的防回卷清理。提高上限会扩大维护窗口和旧 XID 元数据占用,并缩短从发现积压到回卷保护线之间的余量。

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

调优建议

提示

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

场景 建议
OLTP 以全库最大 XID/MXID 年龄、最旧表和清理完成速率校准 autovacuum_freeze_max_age;优先消除长事务、失效槽和被阻塞 worker,绝不能靠提高年龄掩盖积压。
OLAP 在批量窗口主动 VACUUM (FREEZE) 新装载/静态分区,并给全表扫描留 I/O 时间;年龄预算按峰值事务速率而不是墙钟经验换算。
小规格 保持上游默认通常最安全。容量较小不等于可关闭防回卷维护;监控所有数据库,而不只是当前业务库。

Pigsty 取值

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

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

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 1000000000 (dcs);OLAP: PG9.0–19 Beta 3 = 1000000000 (dcs);CRIT: PG9.0–19 Beta 3 = 1000000000 (dcs);TINY: PG9.0–19 Beta 3 = 1000000000 (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在以更大的 XID 年龄运行窗口换取更少的强制防回卷清理;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 不按实际事务速率就把事务年龄换算成天数。
  • 用提高上限掩盖被阻塞或资源不足的 VACUUM。
  • 只监控当前数据库而漏掉其他数据库与表。
  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。

vacuum_freeze_min_age · vacuum_freeze_table_age · vacuum_failsafe_age · autovacuum_multixact_freeze_max_age · vacuum_multixact_freeze_min_age · vacuum_multixact_freeze_table_age

参考资料

6 - autovacuum_freeze_score_weight

autovacuum_freeze_score_weight:设置 autovacuum 优先级中事务 ID 冻结得分的缩放系数。实测在档范围为 PG19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 1,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 autovacuum 优先级中事务 ID 冻结得分的缩放系数。

身份

类型 , real
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 , 010
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Automatic Vacuuming
上游分类
最后 boot 值 , 1
1

生命周期

Fact
首次观测 PG19 Beta 3
在档版本 PG19 Beta 3
移除版本
引入提交 d7965d65fc5b — Add rudimentary table prioritization to autovacuum.
提交日期 2026-03-27
Discussion 讨论 1

默认值变迁

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

机制详解

autovacuum_freeze_score_weight:设置 autovacuum 优先级中事务 ID 冻结得分的缩放系数。重新加载配置即可让服务器采用新值,无需完整重启。 本站在 PG19 Beta 3 实测到它;boot_val 是编译或初始化基线,并不能证明某个运行集群的当前有效值。

PostgreSQL 19 会为每个候选表计算得分,并按加权分量的最大值安排工作。该参数乘在事务 ID 冻结年龄分量上:大于 1 会提高其调度影响,0 到 1 会降低影响;把全部得分权重设为 0 可恢复 PG19 之前按目录顺序处理的策略。可通过 pg_stat_autovacuum_scores 检查各分量。

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

调优建议

提示

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

场景 建议
OLTP 先使用上游默认值,再依据 pg_stat_autovacuum_scores、表变更量、冻结年龄、排队与前台延迟决定是否修改。必须保护防回卷任务,避免偏爱忙表而饿死低流量表。
OLAP 批处理环境可能受益于优先处理最大维护债务或并行清理索引,但必须衡量整个维护窗口的 I/O 饱和、维护内存、worker 竞争与完成时间。
小规格 权重和并行度应保守;一个额外 worker 就可能占据很大比例的 CPU、内存与存储队列。先修正阈值,并确保 autovacuum 有足够时间完成。

Pigsty 取值

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

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

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

常见坑

  • 把 autovacuum_freeze_score_weight 的实测 boot_val 当成初始化后或托管集群当前有效值的证明。
  • 忽略 pg_settings 报告的 sighup context,误以为修改会立即生效。
  • 孤立修改该参数,没有检查关联上限、可观测性和回滚路径。
  • 在生产中依赖测试版行为,却没有在 PostgreSQL 19 正式版发布后重新验证。

autovacuum_multixact_freeze_score_weight · autovacuum_vacuum_score_weight · autovacuum_vacuum_insert_score_weight · autovacuum_analyze_score_weight · autovacuum_max_workers · autovacuum_naptime

参考资料

7 - autovacuum_max_parallel_workers

autovacuum_max_parallel_workers:设置单个 autovacuum worker 可使用的最大并行 worker 数。实测在档范围为 PG19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 0,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置单个 autovacuum worker 可使用的最大并行 worker 数。

身份

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

生命周期

Fact
首次观测 PG19 Beta 3
在档版本 PG19 Beta 3
移除版本
引入提交 1ff3180ca016 — Allow autovacuum to use parallel vacuum workers.
提交日期 2026-04-06
Discussion 讨论 1

默认值变迁

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

机制详解

autovacuum_max_parallel_workers:设置单个 autovacuum worker 可使用的最大并行 worker 数。重新加载配置即可让服务器采用新值,无需完整重启。 本站在 PG19 Beta 3 实测到它;boot_val 是编译或初始化基线,并不能证明某个运行集群的当前有效值。

这个上限按单个 autovacuum worker 计算,只作用于索引清理与索引 cleanup 阶段。0 会禁用并行 autovacuum;实际数量还受 max_parallel_workers 限制,同时每个参与进程都会消耗 CPU 与维护内存。

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

调优建议

提示

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

场景 建议
OLTP 先使用上游默认值,再依据 pg_stat_autovacuum_scores、表变更量、冻结年龄、排队与前台延迟决定是否修改。必须保护防回卷任务,避免偏爱忙表而饿死低流量表。
OLAP 批处理环境可能受益于优先处理最大维护债务或并行清理索引,但必须衡量整个维护窗口的 I/O 饱和、维护内存、worker 竞争与完成时间。
小规格 权重和并行度应保守;一个额外 worker 就可能占据很大比例的 CPU、内存与存储队列。先修正阈值,并确保 autovacuum 有足够时间完成。

Pigsty 取值

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

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

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

常见坑

  • 把 autovacuum_max_parallel_workers 的实测 boot_val 当成初始化后或托管集群当前有效值的证明。
  • 忽略 pg_settings 报告的 sighup context,误以为修改会立即生效。
  • 孤立修改该参数,没有检查关联上限、可观测性和回滚路径。
  • 在生产中依赖测试版行为,却没有在 PostgreSQL 19 正式版发布后重新验证。

autovacuum_max_workers · autovacuum_worker_slots · max_parallel_workers · maintenance_work_mem · autovacuum_work_mem

参考资料

8 - autovacuum_max_workers

设置集群内可同时运行的 autovacuum worker 上限,不包含 launcher。增加 worker 能提高调度容量,但也会提高并发维护的资源需求。
说明

Fact — 官方简述译文:限制可同时运行的 autovacuum worker 进程数量。

身份

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

生命周期

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

默认值变迁

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

机制详解

Launcher 在各数据库间启动 worker,直到达到该上限。每个 worker 同时处理一张表,多个 worker 可以位于同一数据库;这些进程不占用 max_connections 名额。

在 PostgreSQL 18 中,autovacuum worker 来自 autovacuum_worker_slots 预留池,因此本值高于 slot 数量也不会生效。本地事实矩阵还显示:PG10-17 需要重启,PG18 改为可重新加载。

多个 worker 活跃时,autovacuum 成本额度通常会在它们之间平衡。因此只提高 worker 数主要改善并发和排队,不一定成倍提高允许的总维护 I/O 速率。

调优建议

提示

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

场景 建议
OLTP 只有在待处理表排队过久且存储仍有余量时才逐步增加,并同时观察 worker 饱和度、清理时长、I/O 延迟与 autovacuum_worker_slots。
OLAP 大表可能长期占据 worker,适量增加可减少跨库积压;同时应复核维护窗口和成本限流参数。
小规格 两到三个通常是合理起点。受限主机优先减少并发 worker,不要关闭 autovacuum。

Pigsty 取值

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

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

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 3 (dcs);OLAP: PG9.0–19 Beta 3 = 3 (dcs);CRIT: PG9.0–19 Beta 3 = 3 (dcs);TINY: PG9.0–19 Beta 3 = 2 (dcs)。 建议(待人工复核)——编辑推断(待维护者复核):TINY 通过减少维护并发来控制 CPU 与 I/O 争用,其余模板保留保守的上游并发度。

常见坑

  • PG18 中高于 autovacuum_worker_slots 的部分不会生效。
  • 更多 worker 可能在缩短积压的同时放大 I/O 延迟。
  • 只提高 worker 数不一定提高成本限流下的总清理吞吐。
  • 少数大表可能占满全部 worker,拖延其他数据库。
  • PG10-17 修改后需重启;PG18 可重新加载。

autovacuum · autovacuum_worker_slots · autovacuum_naptime · autovacuum_vacuum_cost_limit · autovacuum_vacuum_cost_delay · max_worker_processes

参考资料

9 - autovacuum_multixact_freeze_max_age

autovacuum_multixact_freeze_max_age:设置为防止 MultiXact 回卷而强制自动清理表的 MultiXact 年龄。实测在档范围为 PG9.3–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 400000000,context 为 postmaster。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置为防止 MultiXact 回卷而强制自动清理表的 MultiXact 年龄。

身份

类型 , integer
上游 pg_settings 类型
Context , postmaster
修改后需要重启数据库
单位 ,
原始单位
范围 , 100002000000000
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Automatic Vacuuming
上游分类
最后 boot 值 , 400000000
400000000

生命周期

Fact
首次观测 PG9.3
在档版本 PG9.3–19 Beta 3
移除版本
引入提交 fb47de2be6e4 — Separate multixact freezing parameters from xid’s
提交日期 2014-02-13
Discussion

默认值变迁

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

机制详解

设置为防止 MultiXact 回卷而强制自动清理表的 MultiXact 年龄。该值在服务器启动时固定,修改后必须重启。

当 relminmxid 的年龄越过该上限时会强制进行防 MultiXact 回卷清理,即便普通 autovacuum 被关闭。成员存储压力还可能让扫描更早发生,不能只看一个配置数值判断安全。

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

调优建议

提示

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

场景 建议
OLTP 以全库最大 XID/MXID 年龄、最旧表和清理完成速率校准 autovacuum_multixact_freeze_max_age;优先消除长事务、失效槽和被阻塞 worker,绝不能靠提高年龄掩盖积压。
OLAP 在批量窗口主动 VACUUM (FREEZE) 新装载/静态分区,并给全表扫描留 I/O 时间;年龄预算按峰值事务速率而不是墙钟经验换算。
小规格 保持上游默认通常最安全。容量较小不等于可关闭防回卷维护;监控所有数据库,而不只是当前业务库。

Pigsty 取值

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

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

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

常见坑

  • 忽略 MultiXact member 空间压力会提前触发维护。
  • 误以为 XID 年龄监控也覆盖 MXID。
  • 长期行锁持续生成旧 MultiXact 时仍提高上限。
  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。

autovacuum_freeze_max_age · vacuum_freeze_min_age · vacuum_freeze_table_age · vacuum_failsafe_age · vacuum_multixact_freeze_min_age · vacuum_multixact_freeze_table_age

参考资料

10 - autovacuum_multixact_freeze_score_weight

autovacuum_multixact_freeze_score_weight:设置 autovacuum 优先级中 MultiXact 冻结得分的缩放系数。实测在档范围为 PG19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 1,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 autovacuum 优先级中 MultiXact 冻结得分的缩放系数。

身份

类型 , real
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 , 010
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Automatic Vacuuming
上游分类
最后 boot 值 , 1
1

生命周期

Fact
首次观测 PG19 Beta 3
在档版本 PG19 Beta 3
移除版本
引入提交 d7965d65fc5b — Add rudimentary table prioritization to autovacuum.
提交日期 2026-03-27
Discussion 讨论 1

默认值变迁

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

机制详解

autovacuum_multixact_freeze_score_weight:设置 autovacuum 优先级中 MultiXact 冻结得分的缩放系数。重新加载配置即可让服务器采用新值,无需完整重启。 本站在 PG19 Beta 3 实测到它;boot_val 是编译或初始化基线,并不能证明某个运行集群的当前有效值。

PostgreSQL 19 会为每个候选表计算得分,并按加权分量的最大值安排工作。该参数乘在MultiXact 冻结年龄分量上:大于 1 会提高其调度影响,0 到 1 会降低影响;把全部得分权重设为 0 可恢复 PG19 之前按目录顺序处理的策略。可通过 pg_stat_autovacuum_scores 检查各分量。

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

调优建议

提示

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

场景 建议
OLTP 先使用上游默认值,再依据 pg_stat_autovacuum_scores、表变更量、冻结年龄、排队与前台延迟决定是否修改。必须保护防回卷任务,避免偏爱忙表而饿死低流量表。
OLAP 批处理环境可能受益于优先处理最大维护债务或并行清理索引,但必须衡量整个维护窗口的 I/O 饱和、维护内存、worker 竞争与完成时间。
小规格 权重和并行度应保守;一个额外 worker 就可能占据很大比例的 CPU、内存与存储队列。先修正阈值,并确保 autovacuum 有足够时间完成。

Pigsty 取值

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

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

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

常见坑

  • 把 autovacuum_multixact_freeze_score_weight 的实测 boot_val 当成初始化后或托管集群当前有效值的证明。
  • 忽略 pg_settings 报告的 sighup context,误以为修改会立即生效。
  • 孤立修改该参数,没有检查关联上限、可观测性和回滚路径。
  • 在生产中依赖测试版行为,却没有在 PostgreSQL 19 正式版发布后重新验证。

autovacuum_freeze_score_weight · autovacuum_vacuum_score_weight · autovacuum_vacuum_insert_score_weight · autovacuum_analyze_score_weight · autovacuum_max_workers · autovacuum_naptime

参考资料

11 - autovacuum_naptime

autovacuum_naptime:设置两轮 autovacuum 扫描之间的休眠时间。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 1 min,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置两轮 autovacuum 扫描之间的休眠时间。

身份

类型 , integer
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 , s
原始单位
范围 , 12147483
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Automatic Vacuuming
上游分类
最后 boot 值 , 60
1 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 60 s 1 min

机制详解

设置两轮 autovacuum 扫描之间的休眠时间。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

Launcher 尝试在每个数据库每隔该时长启动一次 worker;若有 N 个数据库,启动尝试通常按约 naptime/N 分散。它不是每张表的固定轮询周期,worker 槽位和长任务会进一步影响实际延迟。

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

调优建议

提示

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

场景 建议
OLTP 根据表大小、变更速率与维护 SLA 调 autovacuum_naptime,大表优先使用表级阈值;观察触发间隔、死元组和 ANALYZE/VACUUM 时长。
OLAP 批量装载后主动 ANALYZE/VACUUM,不要只等待比例阈值;对 append-only 分区单独规划冻结与 visibility map 推进。
小规格 先保持默认或 Pigsty 矩阵值;小表固定阈值比比例项更重要,修改后确认 worker 数量和 I/O 仍有余量。

Pigsty 取值

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

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

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 1min (dcs);OLAP: PG9.0–19 Beta 3 = 1min (dcs);CRIT: PG9.0–19 Beta 3 = 1min (dcs);TINY: PG9.0–19 Beta 3 = 1min (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在显式保留 PostgreSQL 每分钟的数据库调度节奏;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

autovacuum · autovacuum_max_workers · autovacuum_worker_slots · autovacuum_work_mem · track_counts · autovacuum_analyze_scale_factor

参考资料

12 - autovacuum_vacuum_cost_delay

autovacuum_vacuum_cost_delay:设置 autovacuum 的清理成本延迟(毫秒)。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 2 ms,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 autovacuum 的清理成本延迟(毫秒)。

身份

类型 , real
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 , ms
原始单位
范围 , -1100
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Automatic Vacuuming
上游分类
最后 boot 值 , 2
2 ms

生命周期

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

默认值变迁

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

机制详解

设置 autovacuum 的清理成本延迟(毫秒)。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

这些值控制 autovacuum worker 的成本节流;-1 表示分别继承 vacuum_cost_delay 或 vacuum_cost_limit。多个 worker 活跃时,autovacuum 成本额度会在 worker 间平衡,因此单 worker 观察值不能直接乘以并发数。

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

调优建议

提示

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

场景 建议
OLTP 用 autovacuum 时长、死元组增长和前台 I/O 延迟共同调 autovacuum_vacuum_cost_delay;优先表级覆盖热点表,避免全局节流让清理永远追不上。
OLAP 在装载后维护窗口可提高成本额度或缩短延迟,但要验证扫描吞吐不会挤占查询/导入;failsafe 触发说明常态策略已失效。
小规格 保持温和默认;若磁盘很慢,降低并发或给单表覆盖通常比无限增大 delay 更可控。

Pigsty 取值

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

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

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = -1 (dcs);OLAP: PG9.0–19 Beta 3 = -1 (dcs);CRIT: PG9.0–19 Beta 3 = -1 (dcs);TINY: PG9.0–19 Beta 3 = -1 (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在用 -1 让 autovacuum 延迟继承普通 vacuum 成本设置;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

vacuum_cost_delay · vacuum_cost_limit · vacuum_cost_page_hit · vacuum_cost_page_miss · vacuum_cost_page_dirty · autovacuum_vacuum_cost_limit

参考资料

13 - autovacuum_vacuum_cost_limit

autovacuum_vacuum_cost_limit:设置 autovacuum 休眠前可用的清理成本额度。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 -1,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 autovacuum 休眠前可用的清理成本额度。

身份

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

生命周期

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

默认值变迁

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

机制详解

设置 autovacuum 休眠前可用的清理成本额度。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

这些值控制 autovacuum worker 的成本节流;-1 表示分别继承 vacuum_cost_delay 或 vacuum_cost_limit。多个 worker 活跃时,autovacuum 成本额度会在 worker 间平衡,因此单 worker 观察值不能直接乘以并发数。

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

调优建议

提示

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

场景 建议
OLTP 用 autovacuum 时长、死元组增长和前台 I/O 延迟共同调 autovacuum_vacuum_cost_limit;优先表级覆盖热点表,避免全局节流让清理永远追不上。
OLAP 在装载后维护窗口可提高成本额度或缩短延迟,但要验证扫描吞吐不会挤占查询/导入;failsafe 触发说明常态策略已失效。
小规格 保持温和默认;若磁盘很慢,降低并发或给单表覆盖通常比无限增大 delay 更可控。

Pigsty 取值

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

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

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = -1 (dcs);OLAP: PG9.0–19 Beta 3 = -1 (dcs);CRIT: PG9.0–19 Beta 3 = -1 (dcs);TINY: PG9.0–19 Beta 3 = -1 (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在用 -1 让 autovacuum 成本额度继承 vacuum_cost_limit;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

vacuum_cost_delay · vacuum_cost_limit · vacuum_cost_page_hit · vacuum_cost_page_miss · vacuum_cost_page_dirty · autovacuum_vacuum_cost_delay

参考资料

14 - autovacuum_vacuum_insert_scale_factor

autovacuum_vacuum_insert_scale_factor:以 reltuples 的比例设置触发 VACUUM 前的插入元组数量。它是 PG13–18 的 sighup 参数;最新实测启动默认值为 0.2。
说明

Fact — 官方简述译文:以 reltuples 的比例设置触发 VACUUM 前的插入元组数量。

身份

类型 , real
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 , 0100
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Automatic Vacuuming
上游分类
最后 boot 值 , 0.2
0.2

生命周期

Fact
首次观测 PG13
在档版本 PG13–19 Beta 3
移除版本
引入提交 b07642dbcd8d — Trigger autovacuum based on number of INSERTs
提交日期 2020-03-28
Discussion 讨论 1

默认值变迁

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

机制详解

以 reltuples 的比例设置触发 VACUUM 前的插入元组数量。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

仅插入表的触发量由 insert threshold + insert scale factor × reltuples × 未 all-frozen 比例计算。该清理主要推进 visibility map 与冻结,即使没有死元组也能减少未来 aggressive VACUUM 工作。

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

调优建议

提示

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

场景 建议
OLTP 根据表大小、变更速率与维护 SLA 调 autovacuum_vacuum_insert_scale_factor,大表优先使用表级阈值;观察触发间隔、死元组和 ANALYZE/VACUUM 时长。
OLAP 批量装载后主动 ANALYZE/VACUUM,不要只等待比例阈值;对 append-only 分区单独规划冻结与 visibility map 推进。
小规格 先保持默认或 Pigsty 矩阵值;小表固定阈值比比例项更重要,修改后确认 worker 数量和 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 专属理由。

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

autovacuum_vacuum_threshold · autovacuum_vacuum_scale_factor · autovacuum_vacuum_max_threshold · autovacuum_vacuum_insert_threshold · autovacuum · autovacuum_analyze_scale_factor

参考资料

15 - autovacuum_vacuum_insert_score_weight

autovacuum_vacuum_insert_score_weight:设置 autovacuum 优先级中仅插入清理得分的缩放系数。实测在档范围为 PG19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 1,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 autovacuum 优先级中仅插入清理得分的缩放系数。

身份

类型 , real
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 , 010
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Automatic Vacuuming
上游分类
最后 boot 值 , 1
1

生命周期

Fact
首次观测 PG19 Beta 3
在档版本 PG19 Beta 3
移除版本
引入提交 d7965d65fc5b — Add rudimentary table prioritization to autovacuum.
提交日期 2026-03-27
Discussion 讨论 1

默认值变迁

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

机制详解

autovacuum_vacuum_insert_score_weight:设置 autovacuum 优先级中仅插入清理得分的缩放系数。重新加载配置即可让服务器采用新值,无需完整重启。 本站在 PG19 Beta 3 实测到它;boot_val 是编译或初始化基线,并不能证明某个运行集群的当前有效值。

PostgreSQL 19 会为每个候选表计算得分,并按加权分量的最大值安排工作。该参数乘在插入驱动的清理压力分量上:大于 1 会提高其调度影响,0 到 1 会降低影响;把全部得分权重设为 0 可恢复 PG19 之前按目录顺序处理的策略。可通过 pg_stat_autovacuum_scores 检查各分量。

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

调优建议

提示

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

场景 建议
OLTP 先使用上游默认值,再依据 pg_stat_autovacuum_scores、表变更量、冻结年龄、排队与前台延迟决定是否修改。必须保护防回卷任务,避免偏爱忙表而饿死低流量表。
OLAP 批处理环境可能受益于优先处理最大维护债务或并行清理索引,但必须衡量整个维护窗口的 I/O 饱和、维护内存、worker 竞争与完成时间。
小规格 权重和并行度应保守;一个额外 worker 就可能占据很大比例的 CPU、内存与存储队列。先修正阈值,并确保 autovacuum 有足够时间完成。

Pigsty 取值

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

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

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

常见坑

  • 把 autovacuum_vacuum_insert_score_weight 的实测 boot_val 当成初始化后或托管集群当前有效值的证明。
  • 忽略 pg_settings 报告的 sighup context,误以为修改会立即生效。
  • 孤立修改该参数,没有检查关联上限、可观测性和回滚路径。
  • 在生产中依赖测试版行为,却没有在 PostgreSQL 19 正式版发布后重新验证。

autovacuum_freeze_score_weight · autovacuum_multixact_freeze_score_weight · autovacuum_vacuum_score_weight · autovacuum_analyze_score_weight · autovacuum_max_workers · autovacuum_naptime

参考资料

16 - autovacuum_vacuum_insert_threshold

autovacuum_vacuum_insert_threshold:设置触发 VACUUM 前插入元组数量的最低阈值。它是 PG13–18 的 sighup 参数;最新实测启动默认值为 1000。
说明

Fact — 官方简述译文:设置触发 VACUUM 前插入元组数量的最低阈值。

身份

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

生命周期

Fact
首次观测 PG13
在档版本 PG13–19 Beta 3
移除版本
引入提交 b07642dbcd8d — Trigger autovacuum based on number of INSERTs
提交日期 2020-03-28
Discussion 讨论 1

默认值变迁

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

机制详解

设置触发 VACUUM 前插入元组数量的最低阈值。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

仅插入表的触发量由 insert threshold + insert scale factor × reltuples × 未 all-frozen 比例计算。该清理主要推进 visibility map 与冻结,即使没有死元组也能减少未来 aggressive VACUUM 工作。

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

调优建议

提示

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

场景 建议
OLTP 根据表大小、变更速率与维护 SLA 调 autovacuum_vacuum_insert_threshold,大表优先使用表级阈值;观察触发间隔、死元组和 ANALYZE/VACUUM 时长。
OLAP 批量装载后主动 ANALYZE/VACUUM,不要只等待比例阈值;对 append-only 分区单独规划冻结与 visibility map 推进。
小规格 先保持默认或 Pigsty 矩阵值;小表固定阈值比比例项更重要,修改后确认 worker 数量和 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 专属理由。

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

autovacuum_vacuum_threshold · autovacuum_vacuum_scale_factor · autovacuum_vacuum_max_threshold · autovacuum_vacuum_insert_scale_factor · autovacuum · autovacuum_analyze_scale_factor

参考资料

17 - autovacuum_vacuum_max_threshold

autovacuum_vacuum_max_threshold:设置触发 VACUUM 前更新或删除元组数量的最高阈值。实测在档范围为 PG18–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 100000000,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置触发 VACUUM 前更新或删除元组数量的最高阈值。

身份

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

生命周期

Fact
首次观测 PG18
在档版本 PG18–19 Beta 3
移除版本
引入提交 306dc520b9df — Introduce autovacuum_vacuum_max_threshold.
提交日期 2025-02-05
Discussion 讨论 1

默认值变迁

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

机制详解

设置触发 VACUUM 前更新或删除元组数量的最高阈值。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

普通自动清理阈值为固定项加 scale factor × reltuples;PG18 起再由 autovacuum_vacuum_max_threshold 给出上界。它针对更新/删除产生的死元组,表级 storage parameter 可覆盖各项;防回卷清理另有独立强制条件。

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

调优建议

提示

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

场景 建议
OLTP 根据表大小、变更速率与维护 SLA 调 autovacuum_vacuum_max_threshold,大表优先使用表级阈值;观察触发间隔、死元组和 ANALYZE/VACUUM 时长。
OLAP 批量装载后主动 ANALYZE/VACUUM,不要只等待比例阈值;对 append-only 分区单独规划冻结与 visibility map 推进。
小规格 先保持默认或 Pigsty 矩阵值;小表固定阈值比比例项更重要,修改后确认 worker 数量和 I/O 仍有余量。

Pigsty 取值

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

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

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

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

autovacuum_vacuum_threshold · autovacuum_vacuum_scale_factor · autovacuum_vacuum_insert_threshold · autovacuum_vacuum_insert_scale_factor · autovacuum · autovacuum_analyze_scale_factor

参考资料

18 - autovacuum_vacuum_scale_factor

控制普通 autovacuum VACUUM 触发条件中与表大小成比例的部分。数值越低,大表在更小比例的行变成旧版本后就会进入清理候选。
说明

Fact — 官方简述译文:把表大小的一定比例加入触发 VACUUM 的元组变更阈值。

身份

类型 , real
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 , 0100
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Automatic Vacuuming
上游分类
最后 boot 值 , 0.2
0.2

生命周期

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.2 0.2

机制详解

核心触发值为基础阈值加上本参数乘以 pg_class.reltuples;后者是近似行数。PostgreSQL 18 还会用 autovacuum_vacuum_max_threshold 对结果封顶。

该触发器统计 UPDATE 或 DELETE 产生的旧元组;仅插入负载有独立的 insert threshold 与 scale factor。防回卷清理由事务年龄规则控制,不依赖本参数。

表级 autovacuum_vacuum_scale_factor storage parameter 会覆盖全局值。当不同表的大小和更新率差异很大时,表级设置通常更合适。

调优建议

提示

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

场景 建议
OLTP 对大型高更新表使用更低的表级值,避免死元组形成巨大的绝对积压;应依据实际变更量与清理时长验证,而不是只看百分比。
OLAP 追加与批处理负载应让阈值配合装载周期及显式 VACUUM/ANALYZE;过低的全局值可能在批处理期间触发不必要维护。
小规格 真正的小表通常可使用上游默认值。优先逐表处理例外;过低的集群级值可能导致频繁而细碎的 vacuum。

Pigsty 取值

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

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

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 0.08 (dcs);OLAP: PG9.0–19 Beta 3 = 0.08 (dcs);CRIT: PG9.0–19 Beta 3 = 0.08 (dcs);TINY: PG9.0–19 Beta 3 未修改。 建议(待人工复核)——编辑推断(待维护者复核):较大规格模板通过更早清理限制大表的绝对死元组积压,而 TINY 避免在受限资源上增加清理频率。

常见坑

  • 看似很小的比例在大表上仍可能代表数百万死元组。
  • 全局降低可能让大量表持续产生 I/O 压力。
  • 它不控制仅插入触发的 vacuum,也不控制防回卷 vacuum。
  • reltuples 是估算值,触发点不是精确的死元组比例。
  • 表级 storage parameter 可能让该表忽略全局值。

autovacuum_vacuum_threshold · autovacuum_vacuum_max_threshold · autovacuum_vacuum_insert_scale_factor · autovacuum_analyze_scale_factor · autovacuum_naptime · autovacuum_freeze_max_age

参考资料

19 - autovacuum_vacuum_score_weight

autovacuum_vacuum_score_weight:设置 autovacuum 优先级中普通 VACUUM 得分的缩放系数。实测在档范围为 PG19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 1,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 autovacuum 优先级中普通 VACUUM 得分的缩放系数。

身份

类型 , real
上游 pg_settings 类型
Context , sighup
配置 reload 后生效
单位 ,
原始单位
范围 , 010
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Automatic Vacuuming
上游分类
最后 boot 值 , 1
1

生命周期

Fact
首次观测 PG19 Beta 3
在档版本 PG19 Beta 3
移除版本
引入提交 d7965d65fc5b — Add rudimentary table prioritization to autovacuum.
提交日期 2026-03-27
Discussion 讨论 1

默认值变迁

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

机制详解

autovacuum_vacuum_score_weight:设置 autovacuum 优先级中普通 VACUUM 得分的缩放系数。重新加载配置即可让服务器采用新值,无需完整重启。 本站在 PG19 Beta 3 实测到它;boot_val 是编译或初始化基线,并不能证明某个运行集群的当前有效值。

PostgreSQL 19 会为每个候选表计算得分,并按加权分量的最大值安排工作。该参数乘在更新或删除元组带来的清理压力分量上:大于 1 会提高其调度影响,0 到 1 会降低影响;把全部得分权重设为 0 可恢复 PG19 之前按目录顺序处理的策略。可通过 pg_stat_autovacuum_scores 检查各分量。

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

调优建议

提示

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

场景 建议
OLTP 先使用上游默认值,再依据 pg_stat_autovacuum_scores、表变更量、冻结年龄、排队与前台延迟决定是否修改。必须保护防回卷任务,避免偏爱忙表而饿死低流量表。
OLAP 批处理环境可能受益于优先处理最大维护债务或并行清理索引,但必须衡量整个维护窗口的 I/O 饱和、维护内存、worker 竞争与完成时间。
小规格 权重和并行度应保守;一个额外 worker 就可能占据很大比例的 CPU、内存与存储队列。先修正阈值,并确保 autovacuum 有足够时间完成。

Pigsty 取值

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

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

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

常见坑

  • 把 autovacuum_vacuum_score_weight 的实测 boot_val 当成初始化后或托管集群当前有效值的证明。
  • 忽略 pg_settings 报告的 sighup context,误以为修改会立即生效。
  • 孤立修改该参数,没有检查关联上限、可观测性和回滚路径。
  • 在生产中依赖测试版行为,却没有在 PostgreSQL 19 正式版发布后重新验证。

autovacuum_freeze_score_weight · autovacuum_multixact_freeze_score_weight · autovacuum_vacuum_insert_score_weight · autovacuum_analyze_score_weight · autovacuum_max_workers · autovacuum_naptime

参考资料

20 - autovacuum_vacuum_threshold

autovacuum_vacuum_threshold:设置触发 VACUUM 前更新或删除元组数量的最低阈值。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 50,context 为 sighup。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置触发 VACUUM 前更新或删除元组数量的最低阈值。

身份

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

生命周期

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

默认值变迁

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

机制详解

设置触发 VACUUM 前更新或删除元组数量的最低阈值。重新加载配置即可应用新值;已经开始的工作不会被追溯改变。

普通自动清理阈值为固定项加 scale factor × reltuples;PG18 起再由 autovacuum_vacuum_max_threshold 给出上界。它针对更新/删除产生的死元组,表级 storage parameter 可覆盖各项;防回卷清理另有独立强制条件。

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

调优建议

提示

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

场景 建议
OLTP 根据表大小、变更速率与维护 SLA 调 autovacuum_vacuum_threshold,大表优先使用表级阈值;观察触发间隔、死元组和 ANALYZE/VACUUM 时长。
OLAP 批量装载后主动 ANALYZE/VACUUM,不要只等待比例阈值;对 append-only 分区单独规划冻结与 visibility map 推进。
小规格 先保持默认或 Pigsty 矩阵值;小表固定阈值比比例项更重要,修改后确认 worker 数量和 I/O 仍有余量。

Pigsty 取值

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

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

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 500 (dcs);OLAP: PG9.0–19 Beta 3 = 1000 (dcs);CRIT: PG9.0–19 Beta 3 = 500 (dcs);TINY: PG9.0–19 Beta 3 = 500 (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在提高固定触发项,避免小表只产生少量死元组就清理;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

autovacuum_vacuum_scale_factor · autovacuum_vacuum_max_threshold · autovacuum_vacuum_insert_threshold · autovacuum_vacuum_insert_scale_factor · autovacuum · autovacuum_analyze_scale_factor

参考资料

21 - autovacuum_worker_slots

autovacuum_worker_slots:设置为 autovacuum worker 分配的后端槽位数量。实测在档范围为 PG18–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 16,context 为 postmaster。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置为 autovacuum worker 分配的后端槽位数量。

身份

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

生命周期

Fact
首次观测 PG18
在档版本 PG18–19 Beta 3
移除版本
引入提交 c758119e5bfb — Allow changing autovacuum_max_workers without restarting.
提交日期 2025-01-06
Discussion 讨论 1

默认值变迁

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

机制详解

设置为 autovacuum worker 分配的后端槽位数量。该值在服务器启动时固定,修改后必须重启。

PG18 把可注册的 autovacuum worker 后端槽数量与实际并发上限 autovacuum_max_workers 分离。槽位在启动时分配,使 reload 后可以在既有槽预算内改变 worker 并发。

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

调优建议

提示

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

场景 建议
OLTP 根据表大小、变更速率与维护 SLA 调 autovacuum_worker_slots,大表优先使用表级阈值;观察触发间隔、死元组和 ANALYZE/VACUUM 时长。
OLAP 批量装载后主动 ANALYZE/VACUUM,不要只等待比例阈值;对 append-only 分区单独规划冻结与 visibility map 推进。
小规格 先保持默认或 Pigsty 矩阵值;小表固定阈值比比例项更重要,修改后确认 worker 数量和 I/O 仍有余量。

Pigsty 取值

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

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

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

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

autovacuum · autovacuum_naptime · autovacuum_max_workers · autovacuum_work_mem · track_counts · autovacuum_analyze_scale_factor

参考资料

22 - vacuum_cost_delay

vacuum_cost_delay:设置清理成本延迟(毫秒)。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 0 ms,context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置清理成本延迟(毫秒)。

身份

类型 , real
上游 pg_settings 类型
Context , user
普通用户可在运行时修改
单位 , ms
原始单位
范围 , 0100
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Cost-Based Vacuum Delay
上游分类
最后 boot 值 , 0
0 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 0 ms 0 ms

机制详解

设置清理成本延迟(毫秒)。它可在会话级修改,因此不同会话可能采用不同的行为。

VACUUM 按页命中、未命中和弄脏操作累加虚拟成本;余额达到 vacuum_cost_limit 后按 vacuum_cost_delay 休眠并重置。该模型是粗粒度 I/O 节流,不是精确带宽上限;防回卷 failsafe 会绕过节流。

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

调优建议

提示

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

场景 建议
OLTP 用 autovacuum 时长、死元组增长和前台 I/O 延迟共同调 vacuum_cost_delay;优先表级覆盖热点表,避免全局节流让清理永远追不上。
OLAP 在装载后维护窗口可提高成本额度或缩短延迟,但要验证扫描吞吐不会挤占查询/导入;failsafe 触发说明常态策略已失效。
小规格 保持温和默认;若磁盘很慢,降低并发或给单表覆盖通常比无限增大 delay 更可控。

Pigsty 取值

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

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

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 20ms (dcs);OLAP: PG9.0–19 Beta 3 = 10ms (dcs);CRIT: PG9.0–19 Beta 3 = 20ms (dcs);TINY: PG9.0–19 Beta 3 = 20ms (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在节流手工 VACUUM 及继承它的 autovacuum I/O,并让高吞吐 OLAP 使用更短延迟;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

vacuum_cost_limit · vacuum_cost_page_hit · vacuum_cost_page_miss · vacuum_cost_page_dirty · autovacuum_vacuum_cost_delay · autovacuum_vacuum_cost_limit

参考资料

23 - vacuum_cost_limit

vacuum_cost_limit:设置清理进程休眠前可用的成本额度。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 200,context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置清理进程休眠前可用的成本额度。

身份

类型 , integer
上游 pg_settings 类型
Context , user
普通用户可在运行时修改
单位 ,
原始单位
范围 , 110000
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Cost-Based Vacuum Delay
上游分类
最后 boot 值 , 200
200

生命周期

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 200

机制详解

设置清理进程休眠前可用的成本额度。它可在会话级修改,因此不同会话可能采用不同的行为。

VACUUM 按页命中、未命中和弄脏操作累加虚拟成本;余额达到 vacuum_cost_limit 后按 vacuum_cost_delay 休眠并重置。该模型是粗粒度 I/O 节流,不是精确带宽上限;防回卷 failsafe 会绕过节流。

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

调优建议

提示

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

场景 建议
OLTP 用 autovacuum 时长、死元组增长和前台 I/O 延迟共同调 vacuum_cost_limit;优先表级覆盖热点表,避免全局节流让清理永远追不上。
OLAP 在装载后维护窗口可提高成本额度或缩短延迟,但要验证扫描吞吐不会挤占查询/导入;failsafe 触发说明常态策略已失效。
小规格 保持温和默认;若磁盘很慢,降低并发或给单表覆盖通常比无限增大 delay 更可控。

Pigsty 取值

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

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

Advice — 待人工复核。 当前 Pigsty 模板投影事实:OLTP: PG9.0–19 Beta 3 = 2000 (dcs);OLAP: PG9.0–19 Beta 3 = 10000 (dcs);CRIT: PG9.0–19 Beta 3 = 2000 (dcs);TINY: PG9.0–19 Beta 3 = 2000 (dcs)。 建议(待人工复核)——编辑推断(待维护者人工复核):该选择看起来意在配合延迟提供更大的工作额度,尤其提高 OLAP 维护吞吐;发布前应结合当前 Pigsty 模板、硬件夹具和运维保证复核。

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

vacuum_cost_delay · vacuum_cost_page_hit · vacuum_cost_page_miss · vacuum_cost_page_dirty · autovacuum_vacuum_cost_delay · autovacuum_vacuum_cost_limit

参考资料

24 - vacuum_cost_page_dirty

vacuum_cost_page_dirty:设置 VACUUM 弄脏一个页面的成本。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 20,context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 VACUUM 弄脏一个页面的成本。

身份

类型 , integer
上游 pg_settings 类型
Context , user
普通用户可在运行时修改
单位 ,
原始单位
范围 , 010000
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Cost-Based Vacuum Delay
上游分类
最后 boot 值 , 20
20

生命周期

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

默认值变迁

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

机制详解

设置 VACUUM 弄脏一个页面的成本。它可在会话级修改,因此不同会话可能采用不同的行为。

VACUUM 按页命中、未命中和弄脏操作累加虚拟成本;余额达到 vacuum_cost_limit 后按 vacuum_cost_delay 休眠并重置。该模型是粗粒度 I/O 节流,不是精确带宽上限;防回卷 failsafe 会绕过节流。

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

调优建议

提示

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

场景 建议
OLTP 用 autovacuum 时长、死元组增长和前台 I/O 延迟共同调 vacuum_cost_page_dirty;优先表级覆盖热点表,避免全局节流让清理永远追不上。
OLAP 在装载后维护窗口可提高成本额度或缩短延迟,但要验证扫描吞吐不会挤占查询/导入;failsafe 触发说明常态策略已失效。
小规格 保持温和默认;若磁盘很慢,降低并发或给单表覆盖通常比无限增大 delay 更可控。

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 专属理由。

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

vacuum_cost_delay · vacuum_cost_limit · vacuum_cost_page_hit · vacuum_cost_page_miss · autovacuum_vacuum_cost_delay · autovacuum_vacuum_cost_limit

参考资料

25 - vacuum_cost_page_hit

vacuum_cost_page_hit:设置 VACUUM 访问缓冲区缓存命中页面的成本。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 1,context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 VACUUM 访问缓冲区缓存命中页面的成本。

身份

类型 , integer
上游 pg_settings 类型
Context , user
普通用户可在运行时修改
单位 ,
原始单位
范围 , 010000
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Cost-Based Vacuum Delay
上游分类
最后 boot 值 , 1
1

生命周期

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

默认值变迁

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

机制详解

设置 VACUUM 访问缓冲区缓存命中页面的成本。它可在会话级修改,因此不同会话可能采用不同的行为。

VACUUM 按页命中、未命中和弄脏操作累加虚拟成本;余额达到 vacuum_cost_limit 后按 vacuum_cost_delay 休眠并重置。该模型是粗粒度 I/O 节流,不是精确带宽上限;防回卷 failsafe 会绕过节流。

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

调优建议

提示

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

场景 建议
OLTP 用 autovacuum 时长、死元组增长和前台 I/O 延迟共同调 vacuum_cost_page_hit;优先表级覆盖热点表,避免全局节流让清理永远追不上。
OLAP 在装载后维护窗口可提高成本额度或缩短延迟,但要验证扫描吞吐不会挤占查询/导入;failsafe 触发说明常态策略已失效。
小规格 保持温和默认;若磁盘很慢,降低并发或给单表覆盖通常比无限增大 delay 更可控。

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 专属理由。

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

vacuum_cost_delay · vacuum_cost_limit · vacuum_cost_page_miss · vacuum_cost_page_dirty · autovacuum_vacuum_cost_delay · autovacuum_vacuum_cost_limit

参考资料

26 - vacuum_cost_page_miss

vacuum_cost_page_miss:设置 VACUUM 访问缓冲区缓存未命中页面的成本。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 2,context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 VACUUM 访问缓冲区缓存未命中页面的成本。

身份

类型 , integer
上游 pg_settings 类型
Context , user
普通用户可在运行时修改
单位 ,
原始单位
范围 , 010000
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Cost-Based Vacuum Delay
上游分类
最后 boot 值 , 2
2

生命周期

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

默认值变迁

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

机制详解

设置 VACUUM 访问缓冲区缓存未命中页面的成本。它可在会话级修改,因此不同会话可能采用不同的行为。

VACUUM 按页命中、未命中和弄脏操作累加虚拟成本;余额达到 vacuum_cost_limit 后按 vacuum_cost_delay 休眠并重置。该模型是粗粒度 I/O 节流,不是精确带宽上限;防回卷 failsafe 会绕过节流。

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

调优建议

提示

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

场景 建议
OLTP 用 autovacuum 时长、死元组增长和前台 I/O 延迟共同调 vacuum_cost_page_miss;优先表级覆盖热点表,避免全局节流让清理永远追不上。
OLAP 在装载后维护窗口可提高成本额度或缩短延迟,但要验证扫描吞吐不会挤占查询/导入;failsafe 触发说明常态策略已失效。
小规格 保持温和默认;若磁盘很慢,降低并发或给单表覆盖通常比无限增大 delay 更可控。

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 专属理由。

常见坑

  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。
  • 不看长事务、复制槽和 worker 饱和就责怪阈值。
  • 用降低维护频率换取短期平静,最终进入防回卷 failsafe。

vacuum_cost_delay · vacuum_cost_limit · vacuum_cost_page_hit · vacuum_cost_page_dirty · autovacuum_vacuum_cost_delay · autovacuum_vacuum_cost_limit

参考资料

27 - vacuum_failsafe_age

vacuum_failsafe_age:设置 VACUUM 为避免事务 ID 回卷停机而进入保护模式的年龄。它是 PG14–18 的 user 参数;最新实测启动默认值为 1600000000。
说明

Fact — 官方简述译文:设置 VACUUM 为避免事务 ID 回卷停机而进入保护模式的年龄。

身份

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

生命周期

Fact
首次观测 PG14
在档版本 PG14–19 Beta 3
移除版本
引入提交 1e55e7d1755c — Add wraparound failsafe to VACUUM.
提交日期 2021-04-07
Discussion 讨论 1 · 讨论 2

默认值变迁

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

机制详解

设置 VACUUM 为避免事务 ID 回卷停机而进入保护模式的年龄。它可在会话级修改,因此不同会话可能采用不同的行为。

年龄达到 failsafe 后,正在运行的 VACUUM 优先尽快推进冻结边界,会停止成本延迟并跳过部分非必要工作(包括索引清理与表尾截断)。这是避免回卷停机的最后保护,不是日常性能模式。

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

调优建议

提示

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

场景 建议
OLTP 以全库最大 XID/MXID 年龄、最旧表和清理完成速率校准 vacuum_failsafe_age;优先消除长事务、失效槽和被阻塞 worker,绝不能靠提高年龄掩盖积压。
OLAP 在批量窗口主动 VACUUM (FREEZE) 新装载/静态分区,并给全表扫描留 I/O 时间;年龄预算按峰值事务速率而不是墙钟经验换算。
小规格 保持上游默认通常最安全。容量较小不等于可关闭防回卷维护;监控所有数据库,而不只是当前业务库。

Pigsty 取值

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

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

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

常见坑

  • 把 failsafe 当作常态高吞吐 VACUUM 模式。
  • 紧急结束后忽略被跳过的索引清理。
  • 提高年龄以压制维护失败的证据。
  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。

autovacuum_freeze_max_age · vacuum_freeze_min_age · vacuum_freeze_table_age · autovacuum_multixact_freeze_max_age · vacuum_multixact_freeze_min_age · vacuum_multixact_freeze_table_age

参考资料

28 - vacuum_freeze_min_age

vacuum_freeze_min_age:设置 VACUUM 冻结表行所需的最小年龄。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 50000000,context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 VACUUM 冻结表行所需的最小年龄。

身份

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

生命周期

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

默认值变迁

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

机制详解

设置 VACUUM 冻结元组 xmin 时采用的最小 XID 年龄。它是 user context,手工 VACUUM 可在会话中覆盖。

VACUUM 根据该年龄计算 XID 冻结截止点。较小值更早冻结 XID,可能在即将更新的行上重复工作;较大值推迟工作。有效值最高为 autovacuum_freeze_max_age 的一半。

监控各表 age(relfrozenxid) 与所有数据库的 age(datfrozenxid)。应与 vacuum_freeze_table_age、autovacuum_freeze_max_age、vacuum_failsafe_age 联合解释;MXID 由独立的 vacuum_multixact_freeze_min_age 控制。

调优建议

提示

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

场景 建议
OLTP 在 autovacuum_freeze_max_age 之前保留足够余量,使日常 VACUUM 能推进 relfrozenxid。依据 XID 峰值消耗与实测清理完成时间调优,不按日历天数猜测。
OLAP 对以追加为主或静态分区,可在计划 VACUUM 中降低该值以更早冻结 XID、减少后续 aggressive 工作;需验证额外 WAL 与扫描成本。
小规格 没有 XID 年龄证据就保持上游默认。小数据库同样共享集群事务计数器,仍需监控每个数据库。

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 专属理由。

常见坑

  • 把该截止点描述成 MXID 控制;MultiXact 使用 vacuum_multixact_freeze_min_age。
  • 不按实测事务速率就把 XID 年龄换算成时间。
  • 把数值提高到日常 VACUUM 在防回卷工作前失去有效余量。
  • 忽略表级 autovacuum_freeze_min_age 覆盖。

autovacuum_freeze_max_age · vacuum_freeze_table_age · vacuum_failsafe_age · vacuum_multixact_freeze_min_age · autovacuum · log_autovacuum_min_duration

参考资料

29 - vacuum_freeze_table_age

vacuum_freeze_table_age:设置 VACUUM 为冻结元组而扫描整张表的年龄。实测在档范围为 PG9.0–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 150000000,context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 VACUUM 为冻结元组而扫描整张表的年龄。

身份

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

生命周期

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

默认值变迁

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

机制详解

设置 VACUUM 为推进表 relfrozenxid 而切换到 aggressive 扫描的 XID 年龄。它是 user context。

XID aggressive 扫描会访问所有尚未 all-frozen 的页面并冻结合格 XID。PostgreSQL 将有效值限制为 autovacuum_freeze_max_age 的 95%,为强制防回卷 autovacuum 前的手工维护留出空间。

监控 age(relfrozenxid) 与 age(datfrozenxid),而不是 relminmxid。MXID 驱动的 aggressive 扫描由独立的 vacuum_multixact_freeze_table_age 控制。

调优建议

提示

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

场景 建议
OLTP 设置日常维护能够在 autovacuum_freeze_max_age 前触发并完成的 XID aggressive 阈值;在最大关系上验证全表扫描时间。
OLAP 在有 I/O 余量时为静态或新装载分区安排 aggressive XID 冻结;降低阈值可把工作分散到多个维护窗口。
小规格 保持默认并监控每个数据库最旧的 relfrozenxid。设为零会让每次 VACUUM 都采用 aggressive 行为,通常不适合作为全局值。

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 专属理由。

常见坑

  • 监控 relminmxid,而不是 XID 边界 relfrozenxid。
  • 设置高于 autovacuum_freeze_max_age 95% 的值,并误以为 PostgreSQL 会原样采用。
  • 在大型频繁修改表上过度频繁地强制 aggressive 扫描。
  • 只等待强制防回卷 autovacuum,而不测量日常全表扫描完成时间。

autovacuum_freeze_max_age · vacuum_freeze_min_age · vacuum_failsafe_age · vacuum_multixact_freeze_table_age · autovacuum · log_autovacuum_min_duration

参考资料

30 - vacuum_max_eager_freeze_failure_rate

vacuum_max_eager_freeze_failure_rate:设置 VACUUM 在关闭积极冻结扫描前,允许扫描但未能冻结的页面比例。实测在档范围为 PG18–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 0.03,context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 VACUUM 在关闭积极冻结扫描前,允许扫描但未能冻结的页面比例。

身份

类型 , real
上游 pg_settings 类型
Context , user
普通用户可在运行时修改
单位 ,
原始单位
范围 , 01
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Freezing
上游分类
最后 boot 值 , 0.03
0.03

生命周期

Fact
首次观测 PG18
在档版本 PG18–19 Beta 3
移除版本
引入提交 052026c9b903 — Eagerly scan all-visible pages to amortize aggressive vacuum
提交日期 2025-02-11
Discussion 讨论 1

默认值变迁

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

机制详解

设置 VACUUM 在关闭积极冻结扫描前,允许扫描但未能冻结的页面比例。它可在会话级修改,因此不同会话可能采用不同的行为。

PG18 的普通 VACUUM 可积极扫描 all-visible 但尚未 all-frozen 的页;若扫描却不能冻结的失败比例过高,就停止这类额外扫描。提高该值可能提前冻结更多页、减轻未来 aggressive VACUUM,也会增加当次扫描 I/O。

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

调优建议

提示

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

场景 建议
OLTP 以全库最大 XID/MXID 年龄、最旧表和清理完成速率校准 vacuum_max_eager_freeze_failure_rate;优先消除长事务、失效槽和被阻塞 worker,绝不能靠提高年龄掩盖积压。
OLAP 在批量窗口主动 VACUUM (FREEZE) 新装载/静态分区,并给全表扫描留 I/O 时间;年龄预算按峰值事务速率而不是墙钟经验换算。
小规格 保持上游默认通常最安全。容量较小不等于可关闭防回卷维护;监控所有数据库,而不只是当前业务库。

Pigsty 取值

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

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

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

常见坑

  • 把数值当作百分比整数,而不是 0 到 1 的比例。
  • 提高数值、增加 all-visible 页面扫描,却未测量额外 I/O 与 WAL。
  • 误以为积极冻结可以消除周期性 aggressive VACUUM。
  • 忽略表级 storage parameter 覆盖。
  • 只看扫描页数,不看实际冻结页数与未来 aggressive 扫描工作。

vacuum_truncate · vacuum_freeze_table_age · autovacuum_freeze_max_age · maintenance_work_mem · vacuum_failsafe_age · vacuum_freeze_min_age

参考资料

31 - vacuum_multixact_failsafe_age

vacuum_multixact_failsafe_age:设置 VACUUM 为避免 MultiXact 回卷停机而进入保护模式的年龄。它是 PG14–18 的 user 参数;最新实测启动默认值为 1600000000。
说明

Fact — 官方简述译文:设置 VACUUM 为避免 MultiXact 回卷停机而进入保护模式的年龄。

身份

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

生命周期

Fact
首次观测 PG14
在档版本 PG14–19 Beta 3
移除版本
引入提交 1e55e7d1755c — Add wraparound failsafe to VACUUM.
提交日期 2021-04-07
Discussion 讨论 1 · 讨论 2

默认值变迁

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

机制详解

设置 VACUUM 为避免 MultiXact 回卷停机而进入保护模式的年龄。它可在会话级修改,因此不同会话可能采用不同的行为。

年龄达到 failsafe 后,正在运行的 VACUUM 优先尽快推进冻结边界,会停止成本延迟并跳过部分非必要工作(包括索引清理与表尾截断)。这是避免回卷停机的最后保护,不是日常性能模式。

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

调优建议

提示

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

场景 建议
OLTP 以全库最大 XID/MXID 年龄、最旧表和清理完成速率校准 vacuum_multixact_failsafe_age;优先消除长事务、失效槽和被阻塞 worker,绝不能靠提高年龄掩盖积压。
OLAP 在批量窗口主动 VACUUM (FREEZE) 新装载/静态分区,并给全表扫描留 I/O 时间;年龄预算按峰值事务速率而不是墙钟经验换算。
小规格 保持上游默认通常最安全。容量较小不等于可关闭防回卷维护;监控所有数据库,而不只是当前业务库。

Pigsty 取值

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

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

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

常见坑

  • 把 failsafe 当作常态而非紧急状态。
  • 只监控 XID,漏掉 MXID 耗尽。
  • 忽略 failsafe 后的索引清理债务。
  • 只改全局值,忽略表级 storage parameter 覆盖。
  • 把 reltuples 与累计变更统计当作精确实时计数。

autovacuum_freeze_max_age · vacuum_freeze_min_age · vacuum_freeze_table_age · vacuum_failsafe_age · autovacuum_multixact_freeze_max_age · vacuum_multixact_freeze_min_age

参考资料

32 - vacuum_multixact_freeze_min_age

vacuum_multixact_freeze_min_age:设置 VACUUM 冻结表行中 MultiXactId 所需的最小年龄。实测在档范围为 PG9.3–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 5000000,context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 VACUUM 冻结表行中 MultiXactId 所需的最小年龄。

身份

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

生命周期

Fact
首次观测 PG9.3
在档版本 PG9.3–19 Beta 3
移除版本
引入提交 fb47de2be6e4 — Separate multixact freezing parameters from xid’s
提交日期 2014-02-13
Discussion

默认值变迁

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

机制详解

设置 VACUUM 替换元组 xmax 中旧 MultiXact ID 时采用的最小 MXID 年龄。它是 user context,并与 XID 截止点相互独立。

较小值使 VACUUM 更早处理 MXID,较大值推迟该工作。PostgreSQL 仍可能主动移除 MultiXact;有效截止点最高为 autovacuum_multixact_freeze_max_age 的一半。

监控 mxid_age(relminmxid)、mxid_age(datminmxid) 与 pg_multixact member 空间。应与 vacuum_multixact_freeze_table_age、autovacuum_multixact_freeze_max_age、vacuum_multixact_failsafe_age 联合解释。

调优建议

提示

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

场景 建议
OLTP 依据行锁与多事务负载产生的 MXID 消耗调优。与 autovacuum_multixact_freeze_max_age 保持充足距离,并同时监控 member 空间与年龄。
OLAP 单纯批量读取通常不需要修改,但并发行锁装载可能快速消耗 MXID;应在真实负载中测量 mxid_age 与 pg_multixact 增长。
小规格 没有 MXID 证据就保持默认。事务量低并不代表大量共享行锁的工作负载安全。

Pigsty 取值

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

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

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

常见坑

  • 把该截止点描述成 XID 控制,或只监控 relfrozenxid。
  • 忽略 pg_multixact member 空间压力;它可能在配置年龄前就强制 aggressive 工作。
  • 长期共享行锁持续产生旧 MXID 时仍提高该值。
  • 计算上限时误用 autovacuum_freeze_max_age,而不是 MultiXact 专用上限。

autovacuum_multixact_freeze_max_age · vacuum_multixact_freeze_table_age · vacuum_multixact_failsafe_age · vacuum_freeze_min_age · autovacuum · log_autovacuum_min_duration

参考资料

33 - vacuum_multixact_freeze_table_age

vacuum_multixact_freeze_table_age:设置 VACUUM 为冻结 MultiXact 而扫描整张表的年龄。实测在档范围为 PG9.3–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 150000000,context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:设置 VACUUM 为冻结 MultiXact 而扫描整张表的年龄。

身份

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

生命周期

Fact
首次观测 PG9.3
在档版本 PG9.3–19 Beta 3
移除版本
引入提交 fb47de2be6e4 — Separate multixact freezing parameters from xid’s
提交日期 2014-02-13
Discussion

默认值变迁

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

机制详解

设置 VACUUM 为推进表 relminmxid 而切换到 aggressive 扫描的 MultiXact 年龄。它是 user context。

MXID aggressive 扫描会访问所有尚未 all-frozen 的页面并处理合格 MultiXact。PostgreSQL 将有效值限制为 autovacuum_multixact_freeze_max_age 的 95%。

监控 mxid_age(relminmxid)、mxid_age(datminmxid) 与 pg_multixact 空间。XID 边界 relfrozenxid 则由 vacuum_freeze_table_age 控制。

调优建议

提示

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

场景 建议
OLTP 选择在 autovacuum_multixact_freeze_max_age 前留出足够时间完成 aggressive 扫描的 MXID 阈值;重点测量大量共享行锁的负载。
OLAP 纯只读分析通常很少消耗 MXID,但并发装载可能不同;应依据实测 mxid_age 与 member 空间增长安排扫描,不要照搬 XID 设置。
小规格 保持默认并监控 relminmxid/datminmxid。小数据库也可能因行锁模式快速消耗 MXID。

Pigsty 取值

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

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

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

常见坑

  • 监控 relfrozenxid,而不是 MultiXact 边界 relminmxid。
  • 计算 95% 上限时使用 autovacuum_freeze_max_age,而不是 autovacuum_multixact_freeze_max_age。
  • 把 XID 年龄策略照搬到消耗速率完全不同的 MXID 负载。
  • 年龄看似宽裕时忽略 pg_multixact member 空间压力。

autovacuum_multixact_freeze_max_age · vacuum_multixact_freeze_min_age · vacuum_multixact_failsafe_age · vacuum_freeze_table_age · autovacuum · log_autovacuum_min_duration

参考资料

34 - vacuum_truncate

vacuum_truncate:允许 VACUUM 截断表尾的空页面。实测在档范围为 PG18–19 Beta 3;最后在档的 PG19 Beta 3 启动默认值为 on,context 为 user。这是测试版快照事实,PostgreSQL 19 正式发布前仍可能变化。
说明

Fact — 官方简述译文:允许 VACUUM 截断表尾的空页面。

身份

类型 , bool
上游 pg_settings 类型
Context , user
普通用户可在运行时修改
单位 ,
原始单位
范围 ,
最后在档版本的原始上下限
枚举值 ,
非枚举类型记为 —
分类 , Vacuuming / Default Behavior
上游分类
最后 boot 值 , on
on

生命周期

Fact
首次观测 PG18
在档版本 PG18–19 Beta 3
移除版本
引入提交 0164a0f9ee12 — Add vacuum_truncate configuration parameter.
提交日期 2025-03-20
Discussion 讨论 1

默认值变迁

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

机制详解

允许 VACUUM 截断表尾的空页面。它可在会话级修改,因此不同会话可能采用不同的行为。

它参与 VACUUM 的触发、节流或冻结决策;多数行为可被表级 storage parameter 覆盖。应结合 pg_stat_*、pg_class 年龄与真实维护日志判断,而不是只看全局值。

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

调优建议

提示

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

场景 建议
OLTP 根据表大小、变更速率与维护 SLA 调 vacuum_truncate,大表优先使用表级阈值;观察触发间隔、死元组和 ANALYZE/VACUUM 时长。
OLAP 批量装载后主动 ANALYZE/VACUUM,不要只等待比例阈值;对 append-only 分区单独规划冻结与 visibility map 推进。
小规格 先保持默认或 Pigsty 矩阵值;小表固定阈值比比例项更重要,修改后确认 worker 数量和 I/O 仍有余量。

Pigsty 取值

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

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

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

常见坑

  • 误以为截断能删除关系中间的空页;只有连续空表尾可以移除。
  • 忽略 ACCESS EXCLUSIVE 锁尝试及其在繁忙表上的阻塞延迟。
  • 关闭截断后仍期待操作系统文件大小自动缩小。
  • 忘记表级 vacuum_truncate storage parameter 可覆盖会话/全局值。
  • 依赖 failsafe 期间截断空间;为尽快完成,VACUUM 可能跳过它。

vacuum_max_eager_freeze_failure_rate · vacuum_freeze_table_age · autovacuum_freeze_max_age · maintenance_work_mem · autovacuum · autovacuum_analyze_scale_factor

参考资料