五、MVCC、Vacuum 与膨胀
本章是理解 PostgreSQL 并发、维护与容量的核心。PostgreSQL 用**多版本并发控制(Multi-Version Concurrency Control,MVCC)**实现“读不阻塞写、写不阻塞读”,代价是更新/删除会遗留旧版本(死元组),必须由 VACUUM 回收。围绕这一机制,本章讲清可见性、死元组产生、清理职责、冻结与事务 ID 回卷,以及膨胀的识别与治理。
本章目录
- 元组头、事务 ID 与可见性基础
- 快照与可见性规则
- 死元组、HOT 更新与 HOT 链
- VACUUM、ANALYZE 与 Autovacuum
- 冻结、relfrozenxid 与 XID 回卷风险
- 表与索引膨胀的识别与治理
学习目标
- 说清元组头中
xmin、xmax、ctid的含义与可见性判定逻辑 - 理解快照如何决定“一条元组对某事务是否可见”
- 区分
VACUUM、VACUUM FULL、ANALYZE与 Autovacuum 的职责与代价 - 理解冻结与
relfrozenxid,识别并规避 XID 回卷风险 - 用观测视图量化膨胀,并选择安全的治理手段
依赖与前置
版本差异入口
- PostgreSQL 各版本持续增强 Autovacuum 与冻结(如可见性映射的全冻结位、并行 Vacuum、
VACUUM的各类选项);具体默认值与选项以目标版本\h VACUUM和官方文档为准,正文逐篇标注。
