Postgres VACUUM 页级清理深度解析

Vacuum at the Page Level

12radimm💬 2
Postgres VACUUM 页级清理深度解析

大家都知道 Postgres 的 HOT 更新能悄悄回收空间,但真正的清理还得靠 VACUUM。这篇文章带你用 pageinspect 等工具,逐字节观察 VACUUM 在页面上的真实运作。你会发现,VACUUM 并非一步到位,而是分三步走:先扫描堆页回收死元组数据,再清理索引项,最后才释放行指针。特别是当表带有索引时,死元组的行指针会先标记为 LP_DEAD 占位,直到索引清理完成才会真正释放。这种精妙的两阶段设计,正是理解索引膨胀和 VACUUM 行为的关键。

"修剪无法简单地将已删除元组的行指针标记为 LP_UNUSED,因为索引仍然通过 TID 指向它。"

同日更多故事 · 2026-07-09