跳转到主要内容

autovacuum_work_mem

每个 autovacuum 工作进程的内存上限;-1 表示继承 maintenance_work_mem。
说明

Fact — 官方简述译文:设置每个 autovacuum 工作进程可使用的最大内存。

身份

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

生命周期

Fact
首次观测 PG9.4
在档版本 PG9.4–19 Beta 3
移除版本
引入提交 8693559cacf1 — New autovacuum_work_mem parameter
提交日期 2013-12-12
Discussion

默认值变迁

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

机制详解

autovacuum_work_mem 分别作用于每个 autovacuum 工作进程。默认哨兵值 -1 表示使用 maintenance_work_mem,而不是负数内存。

该设置只影响 autovacuum 工作进程,不改变手工执行的 VACUUM。它属于 SIGHUP 上下文,因此是服务器级配置,而不是会话级调优旋钮。

多个工作进程可以并发运行,所以潜在总分配等于每进程取值乘以活跃 autovacuum worker 数。内存只是清理行为的一部分,I/O 节流、工作进程数、触发阈值与表活动同样重要。

调优建议

提示

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

场景 建议
OLTP 当 maintenance_work_mem 很大时,除非并发工作进程预算明确可容纳,否则应为 autovacuum 单独设置更低上限。增加前后观察清理耗时、死元组积压与延迟。
OLAP 大表可能需要更多单 worker 内存,但调度与 worker 并发往往同样关键;应与 autovacuum_max_workers 和维护窗口一起调整。
小规格 只有 maintenance_work_mem 本身克制时才保留 -1;否则设置更小的显式值,避免多个工作进程耗尽主机内存。

Pigsty 取值

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

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

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

常见坑

  • 把 -1 当作负 1 kB,而不是继承哨兵。
  • 误以为该设置控制手工 VACUUM。
  • 只预算一个 worker,而多个 autovacuum worker 可以同时运行。
  • 用增加内存处理实际由 I/O 节流、触发阈值、锁或 worker 容量不足造成的问题。

maintenance_work_mem · autovacuum_max_workers · autovacuum_worker_slots · vacuum_buffer_usage_limit · autovacuum_vacuum_cost_delay

参考资料