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

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

文档 / 配置参数 / 清理

CONFIGURATION PARAMETER清理 / 自动清理

autovacuum

控制 PostgreSQL 是否运行自动清理启动器。

Starts the autovacuum subprocess.

布尔 重载生效 引入 9.0(基线) 现存至 20 devel 0 次默认值变更

类型
布尔bool
上下文
重载生效改配置文件后重载(pg_ctl reload / SIGHUP)即可生效
默认值
on
引入版本
9.0(基线)
状态
现存

PostgreSQL 18 手册 官方文档

版本轨迹

相对 PostgreSQL 17 仅简述或分类有更新。

默认值变迁

on 9.0 – 20

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

手册说明

PostgreSQL 18 手册 · 19.10 清理 本站手册 官方原文

控制服务器是否运行自动清理启动器后台进程。默认为开启, 不过要自动清理正常工作还需要启用track_counts。 该参数只能在postgresql.conf文件或服务器命令行中设置, 不过,通过更改表存储参数可以为表禁用自动清理。

注意即使该参数被禁用,系统也会在需要防止事务ID回卷时发起清理进程。详情请见Section 24.1.5

机制详解

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

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

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

调优建议

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

  • OLTP在线事务处理

    保持开启。优先按热点表单独调优,并结合死元组、autovacuum 时长、worker 被取消情况和 XID 年龄判断是否需要全局加速。

  • OLAP分析与批处理

    为安全起见保持开启,但应与批量装载窗口协调;大批导入后主动 ANALYZE,需要父表统计时对分区父表单独执行 ANALYZE。

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

    保持默认开启。若资源紧张,优先减少 worker 或降低特定表的积极程度,不要仅为节省少量后台活动而关闭 launcher。

常见问题

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

演化历史

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

  1. PostgreSQL 20 ← 19 沿用 19

    事实沿用 19

  2. PostgreSQL 18 ← 17 仅描述更新

    分类 Autovacuum Vacuuming / Automatic Vacuuming

逐版本快照

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

版本 默认值单位上下文类型最小值最大值枚举值
9.0 on 重载生效 布尔
9.1 on 重载生效 布尔
9.2 on 重载生效 布尔
9.3 on 重载生效 布尔
9.4 on 重载生效 布尔
9.5 on 重载生效 布尔
9.6 on 重载生效 布尔
10 on 重载生效 布尔
11 on 重载生效 布尔
12 on 重载生效 布尔
13 on 重载生效 布尔
14 on 重载生效 布尔
15 on 重载生效 布尔
16 on 重载生效 布尔
17 on 重载生效 布尔
18 on 重载生效 布尔
19 on 重载生效 布尔
20 沿用 on 重载生效 布尔

参考资料

同类参数

参数 类型 上下文 默认值 版本变动 最近变更
Vacuuming 清理 21 个
自动清理 21
autovacuum 布尔 重载生效 on
控制 PostgreSQL 是否运行自动清理启动器。 现存
autovacuum_analyze_scale_factor 浮点 重载生效 0.1
以 reltuples 的比例设置触发 ANALYZE 前的元组插入、更新或删除数量。 现存
autovacuum_analyze_score_weight 浮点 重载生效 1
设置 autovacuum 优先级中 ANALYZE 得分的缩放系数。 现存
autovacuum_analyze_threshold 整数 重载生效 50
设置触发 ANALYZE 前元组插入、更新或删除数量的最低阈值。 现存
autovacuum_freeze_max_age 整数 重启生效 200000000
设置为防止事务 ID 回卷而强制自动清理表的年龄。 现存
autovacuum_freeze_score_weight 浮点 重载生效 1
设置 autovacuum 优先级中事务 ID 冻结得分的缩放系数。 现存
autovacuum_max_parallel_workers 整数 重载生效 0
设置单个 autovacuum worker 可使用的最大并行 worker 数。 现存
autovacuum_max_workers 整数 重载生效 3 183 次
限制可同时运行的 autovacuum worker 进程数量。 现存
autovacuum_multixact_freeze_max_age 整数 重启生效 400000000
设置为防止 MultiXact 回卷而强制自动清理表的 MultiXact 年龄。 现存
autovacuum_multixact_freeze_score_weight 浮点 重载生效 1
设置 autovacuum 优先级中 MultiXact 冻结得分的缩放系数。 现存
autovacuum_naptime 整数 重载生效 1 min
设置两轮 autovacuum 扫描之间的休眠时间。 现存
autovacuum_vacuum_cost_delay 浮点 重载生效 2 ms 121 次
设置 autovacuum 的清理成本延迟(毫秒)。 现存
autovacuum_vacuum_cost_limit 整数 重载生效 -1
设置 autovacuum 休眠前可用的清理成本额度。 现存
autovacuum_vacuum_insert_scale_factor 浮点 重载生效 0.2
以 reltuples 的比例设置触发 VACUUM 前的插入元组数量。 现存
autovacuum_vacuum_insert_score_weight 浮点 重载生效 1
设置 autovacuum 优先级中仅插入清理得分的缩放系数。 现存
autovacuum_vacuum_insert_threshold 整数 重载生效 1000
设置触发 VACUUM 前插入元组数量的最低阈值。 现存
autovacuum_vacuum_max_threshold 整数 重载生效 100000000
设置触发 VACUUM 前更新或删除元组数量的最高阈值。 现存
autovacuum_vacuum_scale_factor 浮点 重载生效 0.2
把表大小的一定比例加入触发 VACUUM 的元组变更阈值。 现存
autovacuum_vacuum_score_weight 浮点 重载生效 1
设置 autovacuum 优先级中普通 VACUUM 得分的缩放系数。 现存
autovacuum_vacuum_threshold 整数 重载生效 50
设置触发 VACUUM 前更新或删除元组数量的最低阈值。 现存
autovacuum_worker_slots 整数 重启生效 16
设置为 autovacuum worker 分配的后端槽位数量。 现存