# 第 8 章 MVCC 与 VACUUM - 可运行代码

## 准备

```bash
pip install "psycopg[binary]>=3.1"
psql -h 127.0.0.1 -U postgres -d learn_pg -f ../init.sql
```

## 脚本说明

| 脚本 | 主题 | 看什么 |
|---|---|---|
| `01_mvcc_basic.py` | MVCC 基础 | UPDATE 后 xmin / xmax / ctid 的变化；快照下不同事务看到不同版本 |
| `02_hot_update.py` | HOT 更新 | 「更新无索引列」与「更新有索引列」的 HOT 比例和索引大小对比 |
| `03_vacuum_bloat.py` | 表膨胀与回收 | 普通 VACUUM 不缩盘 vs VACUUM FULL 缩盘的对比 |
| `04_long_transaction_pain.py` | 长事务的危害 | 长事务持有 snapshot 时 VACUUM 死活回收不了死元组 |
| `05_xid_age_check.py` | 回卷监控 | 直接可放进定时任务的 XID 年龄 + 长事务 + 配置体检 |

## 运行

```bash
python 01_mvcc_basic.py
python 02_hot_update.py
python 03_vacuum_bloat.py
python 04_long_transaction_pain.py
python 05_xid_age_check.py
```

> 04 脚本需要超过 5~10 秒（涉及长事务），耐心等待。
