Postgresql
在 PostgreSQL 中的自動清理/清理期間會發生什麼?
這裡的官方文件對我來說似乎很神秘。https://www.postgresql.org/docs/13/routine-vacuuming.html#AUTOVACUUM
有人可以解釋一下在自動真空或手動觸發真空期間發生了什麼嗎?
autovacuum 啟動器程序會定期喚醒,並根據和某些參數設置中的統計數據
pg_stat_all_tables
確定pg_class
是否需要VACUUM
ed 或ANALYZE
d. 如果是,它會啟動一個執行所需操作的 autovacuum 工作程序。
VACUUM
做很多事情。基本程序是:
- 掃描表中的死行版本
- 掃描所有索引並刪除對這些死行版本的引用
- 再次掃描表,去除第一步發現的死行版本
- 如果我們還沒有完成表格,請重複整個過程
另一方面,它也做這些事情:
- 更新表中的統計資訊
pg_class
- 更新“可用空間圖”,讓
INSERT
s 和UPDATE
s 知道在哪裡可以找到有足夠可用空間的塊- 更新“可見性地圖”,以便 PostgreSQL 可以執行高效的僅索引掃描
- “凍結”所有超過特定年齡的活動行,以允許事務 ID 計數器迴繞而不會失去數據