中间件速查手册
关系型数据库清理

VACUUM 是什么?

回收被旧版本占用的空间,否则表会一直膨胀

类比:定期整理房间,把不要的东西清出去

为什么必须有它

PG 的 UPDATE 是“写新版本、旧的留着”,因为可能还有别的事务需要看旧版本。这些旧版本(死元组)不清理就一直占着数据页,表和索引只增不减,扫描越来越慢——这就是表膨胀。

VACUUM 做三件事

它不只是“打扫卫生”。

  • 回收死元组占用的空间,标记为可复用(普通 VACUUM 不还给操作系统)
  • 更新统计信息(配合 ANALYZE),让优化器选对执行计划
  • 推进 XID 的冻结(freeze),防止事务 ID 回卷导致数据库强制停机

autovacuum 为什么没生效

常见原因:长事务或长查询持有快照,导致死元组无法回收;表太大超过触发阈值;autovacuum 进程数不够被其他表占满。监控 `pg_stat_user_tables` 的 n_dead_tup 和 last_autovacuum 能提前发现问题。

它出现在这些中间件里

相关问题

相关概念