用途:应对 PostgreSQL 中 UPDATE/DELETE 遗留死元组导致的表膨胀、查询变慢、磁盘增长,以及 autovacuum 落后和事务 ID(XID)回卷警告。
主要能力:区分 VACUUM 与 VACUUM FULL、ANALYZE、pg_repack 的适用场景;按表调优 autovacuum_vacuum_scale_factor 等参数;用 fillfactor 提升 HOT 更新以减少索引膨胀;监控 age(relfrozenxid) 与 mxid_age();在不停机情况下用 pg_repack 回收磁盘空间。
必要用法:先用 pg_stat_user_tables 查看 n_dead_tup、dead_pct 与 last_autovacuum 判断是否膨胀;大表可用,例如 ALTER TABLE events SET (autovacuum_vacuum_scale_factor = 0.01, autovacuum_vacuum_threshold = 10000); 调整触发阈值;更新频繁的表可设 ALTER TABLE sessions SET (fillfactor = 90); 但只影响之后写入的页面;在线回收空间使用 pg_repack --dbname mydb --table events --jobs 2,需已安装 pg_repack 扩展与客户端,且目标表要有主键或非部分唯一索引;回卷警告时先排查阻塞冻结的会话、预备事务和复制槽,再执行 vacuumdb --all --verbose。
限制:严禁对生产库在线表使用 VACUUM FULL(持有 ACCESS EXCLUSIVE 锁);不要禁用 autovacuum;VACUUM (PARALLEL n) 仅 v13+ 且不能与 FULL 组合;fillfactor 修改需重写表才作用于已有页面。本技能不适用于查询计划分析、索引选型、批量加载和 MVCC 语义,应使用对应的其他技能。具体参数默认值与版本差异以官方文档为准。