文章目录
1. VACUUM概述
VACUUM是PostgreSQL中的一个辅助进程,它主要负责完成两个主要任务: 删除死元组(Dead Tuples
)和 冻结事务ID(Freezing Tansaction Ids
)。本文主要分享VACUUM删除死元组的具体过程以及底层实现;而对于另一个“冻结事务ID”任务则将单独用一篇文章来介绍,因为它需要结合PostgreSQL的 多版本并发控制 (Multi-Version Concurrency Control
, MVCC
)技术来理解。在PostgreSQL 8.0
版本之前,必须手动执行VACUUM进程(使用psql
实用程序或libpq
等客户端程序中执行),而在2005年xx
版本中,VACUUM已经通过守护进程(autovacuum
)实现自动化。其好处是它定期运行ANALYZE
进程来收集频繁更新表的最新统计信息,这使查询规划器能够优化它的计划。