这是本节的多页打印视图。 .
清理与冻结
- 1: autovacuum
- 2: autovacuum_analyze_scale_factor
- 3: autovacuum_analyze_score_weight
- 4: autovacuum_analyze_threshold
- 5: autovacuum_freeze_max_age
- 6: autovacuum_freeze_score_weight
- 7: autovacuum_max_parallel_workers
- 8: autovacuum_max_workers
- 9: autovacuum_multixact_freeze_max_age
- 10: autovacuum_multixact_freeze_score_weight
- 11: autovacuum_naptime
- 12: autovacuum_vacuum_cost_delay
- 13: autovacuum_vacuum_cost_limit
- 14: autovacuum_vacuum_insert_scale_factor
- 15: autovacuum_vacuum_insert_score_weight
- 16: autovacuum_vacuum_insert_threshold
- 17: autovacuum_vacuum_max_threshold
- 18: autovacuum_vacuum_scale_factor
- 19: autovacuum_vacuum_score_weight
- 20: autovacuum_vacuum_threshold
- 21: autovacuum_worker_slots
- 22: vacuum_cost_delay
- 23: vacuum_cost_limit
- 24: vacuum_cost_page_dirty
- 25: vacuum_cost_page_hit
- 26: vacuum_cost_page_miss
- 27: vacuum_failsafe_age
- 28: vacuum_freeze_min_age
- 29: vacuum_freeze_table_age
- 30: vacuum_max_eager_freeze_failure_rate
- 31: vacuum_multixact_failsafe_age
- 32: vacuum_multixact_freeze_min_age
- 33: vacuum_multixact_freeze_table_age
- 34: vacuum_truncate
条目 URL 保持扁平;本分类仅用于侧栏与浏览组织。
1 - autovacuum
Fact — 官方简述译文:控制 PostgreSQL 是否运行自动清理启动器。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- on
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:以 reltuples 的比例设置触发 ANALYZE 前的元组插入、更新或删除数量。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 0.1
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 autovacuum 优先级中 ANALYZE 得分的缩放系数。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 1
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG19 Beta 3 |
| 在档版本 | PG19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | d7965d65fc5b — Add rudimentary table prioritization to autovacuum. |
| 提交日期 | 2026-03-27 |
| Discussion | 讨论 1 |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置触发 ANALYZE 前元组插入、更新或删除数量的最低阈值。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 50
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置为防止事务 ID 回卷而强制自动清理表的年龄。
身份
类型,- 上游 pg_settings 类型
Context,- 修改后需要重启数据库
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 200000000
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 autovacuum 优先级中事务 ID 冻结得分的缩放系数。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 1
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG19 Beta 3 |
| 在档版本 | PG19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | d7965d65fc5b — Add rudimentary table prioritization to autovacuum. |
| 提交日期 | 2026-03-27 |
| Discussion | 讨论 1 |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置单个 autovacuum worker 可使用的最大并行 worker 数。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 0
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG19 Beta 3 |
| 在档版本 | PG19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 1ff3180ca016 — Allow autovacuum to use parallel vacuum workers. |
| 提交日期 | 2026-04-06 |
| Discussion | 讨论 1 |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:限制可同时运行的 autovacuum worker 进程数量。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 3
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置为防止 MultiXact 回卷而强制自动清理表的 MultiXact 年龄。
身份
类型,- 上游 pg_settings 类型
Context,- 修改后需要重启数据库
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 400000000
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.3 |
| 在档版本 | PG9.3–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | fb47de2be6e4 — Separate multixact freezing parameters from xid’s |
| 提交日期 | 2014-02-13 |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 autovacuum 优先级中 MultiXact 冻结得分的缩放系数。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 1
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG19 Beta 3 |
| 在档版本 | PG19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | d7965d65fc5b — Add rudimentary table prioritization to autovacuum. |
| 提交日期 | 2026-03-27 |
| Discussion | 讨论 1 |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置两轮 autovacuum 扫描之间的休眠时间。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 1 min
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 autovacuum 的清理成本延迟(毫秒)。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 2 ms
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 autovacuum 休眠前可用的清理成本额度。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- -1
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:以 reltuples 的比例设置触发 VACUUM 前的插入元组数量。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 0.2
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG13 |
| 在档版本 | PG13–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | b07642dbcd8d — Trigger autovacuum based on number of INSERTs |
| 提交日期 | 2020-03-28 |
| Discussion | 讨论 1 |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 autovacuum 优先级中仅插入清理得分的缩放系数。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 1
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG19 Beta 3 |
| 在档版本 | PG19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | d7965d65fc5b — Add rudimentary table prioritization to autovacuum. |
| 提交日期 | 2026-03-27 |
| Discussion | 讨论 1 |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置触发 VACUUM 前插入元组数量的最低阈值。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 1000
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG13 |
| 在档版本 | PG13–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | b07642dbcd8d — Trigger autovacuum based on number of INSERTs |
| 提交日期 | 2020-03-28 |
| Discussion | 讨论 1 |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置触发 VACUUM 前更新或删除元组数量的最高阈值。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 100000000
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG18 |
| 在档版本 | PG18–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 306dc520b9df — Introduce autovacuum_vacuum_max_threshold. |
| 提交日期 | 2025-02-05 |
| Discussion | 讨论 1 |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:把表大小的一定比例加入触发 VACUUM 的元组变更阈值。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 0.2
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 autovacuum 优先级中普通 VACUUM 得分的缩放系数。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 1
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG19 Beta 3 |
| 在档版本 | PG19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | d7965d65fc5b — Add rudimentary table prioritization to autovacuum. |
| 提交日期 | 2026-03-27 |
| Discussion | 讨论 1 |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置触发 VACUUM 前更新或删除元组数量的最低阈值。
身份
类型,- 上游 pg_settings 类型
Context,- 配置 reload 后生效
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 50
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置为 autovacuum worker 分配的后端槽位数量。
身份
类型,- 上游 pg_settings 类型
Context,- 修改后需要重启数据库
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 16
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG18 |
| 在档版本 | PG18–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | c758119e5bfb — Allow changing autovacuum_max_workers without restarting. |
| 提交日期 | 2025-01-06 |
| Discussion | 讨论 1 |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置清理成本延迟(毫秒)。
身份
类型,- 上游 pg_settings 类型
Context,- 普通用户可在运行时修改
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 0 ms
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置清理进程休眠前可用的成本额度。
身份
类型,- 上游 pg_settings 类型
Context,- 普通用户可在运行时修改
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 200
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 VACUUM 弄脏一个页面的成本。
身份
类型,- 上游 pg_settings 类型
Context,- 普通用户可在运行时修改
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 20
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 VACUUM 访问缓冲区缓存命中页面的成本。
身份
类型,- 上游 pg_settings 类型
Context,- 普通用户可在运行时修改
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 1
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 VACUUM 访问缓冲区缓存未命中页面的成本。
身份
类型,- 上游 pg_settings 类型
Context,- 普通用户可在运行时修改
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 2
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 VACUUM 为避免事务 ID 回卷停机而进入保护模式的年龄。
身份
类型,- 上游 pg_settings 类型
Context,- 普通用户可在运行时修改
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 1600000000
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG14 |
| 在档版本 | PG14–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 1e55e7d1755c — Add wraparound failsafe to VACUUM. |
| 提交日期 | 2021-04-07 |
| Discussion | 讨论 1 · 讨论 2 |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 VACUUM 冻结表行所需的最小年龄。
身份
类型,- 上游 pg_settings 类型
Context,- 普通用户可在运行时修改
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 50000000
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 VACUUM 为冻结元组而扫描整张表的年龄。
身份
类型,- 上游 pg_settings 类型
Context,- 普通用户可在运行时修改
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 150000000
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.0(研究下界) |
| 在档版本 | PG9.0–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言:早于 PG9.0 研究边界 |
| 提交日期 | — |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 VACUUM 在关闭积极冻结扫描前,允许扫描但未能冻结的页面比例。
身份
类型,- 上游 pg_settings 类型
Context,- 普通用户可在运行时修改
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 0.03
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG18 |
| 在档版本 | PG18–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 052026c9b903 — Eagerly scan all-visible pages to amortize aggressive vacuum |
| 提交日期 | 2025-02-11 |
| Discussion | 讨论 1 |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 VACUUM 为避免 MultiXact 回卷停机而进入保护模式的年龄。
身份
类型,- 上游 pg_settings 类型
Context,- 普通用户可在运行时修改
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 1600000000
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG14 |
| 在档版本 | PG14–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 1e55e7d1755c — Add wraparound failsafe to VACUUM. |
| 提交日期 | 2021-04-07 |
| Discussion | 讨论 1 · 讨论 2 |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 VACUUM 冻结表行中 MultiXactId 所需的最小年龄。
身份
类型,- 上游 pg_settings 类型
Context,- 普通用户可在运行时修改
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 5000000
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.3 |
| 在档版本 | PG9.3–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | fb47de2be6e4 — Separate multixact freezing parameters from xid’s |
| 提交日期 | 2014-02-13 |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:设置 VACUUM 为冻结 MultiXact 而扫描整张表的年龄。
身份
类型,- 上游 pg_settings 类型
Context,- 普通用户可在运行时修改
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- 150000000
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG9.3 |
| 在档版本 | PG9.3–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | fb47de2be6e4 — Separate multixact freezing parameters from xid’s |
| 提交日期 | 2014-02-13 |
| Discussion | — |
默认值变迁
| 版本 | 原始 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
Fact — 官方简述译文:允许 VACUUM 截断表尾的空页面。
身份
类型,- 上游 pg_settings 类型
Context,- 普通用户可在运行时修改
单位,- 原始单位
范围,- 最后在档版本的原始上下限
枚举值,- 非枚举类型记为 —
分类,- 上游分类
最后 boot 值,- on
生命周期
| Fact | 值 |
|---|---|
| 首次观测 | PG18 |
| 在档版本 | PG18–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 0164a0f9ee12 — Add vacuum_truncate configuration parameter. |
| 提交日期 | 2025-03-20 |
| Discussion | 讨论 1 |
默认值变迁
| 版本 | 原始 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