跳转到主要内容

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

参考资料