Postgresql

在 PostgreSQL 中的自動清理/清理期間會發生什麼?

  • February 15, 2022

這裡的官方文件對我來說似乎很神秘。https://www.postgresql.org/docs/13/routine-vacuuming.html#AUTOVACUUM

有人可以解釋一下在自動真空或手動觸發真空期間發生了什麼嗎?

autovacuum 啟動器程序會定期喚醒,並根據和某些參數設置中的統計數據pg_stat_all_tables確定pg_class是否需要VACUUMed 或ANALYZEd. 如果是,它會啟動一個執行所需操作的 autovacuum 工作程序。

VACUUM做很多事情。基本程序是:

  • 掃描表中的死行版本
  • 掃描所有索引並刪除對這些死行版本的引用
  • 再次掃描表,去除第一步發現的死行版本
  • 如果我們還沒有完成表格,請重複整個過程

另一方面,它也做這些事情:

  • 更新表中的統計資訊pg_class
  • 更新“可用空間圖”,讓INSERTs 和UPDATEs 知道在哪裡可以找到有足夠可用空間的塊
  • 更新“可見性地圖”,以便 PostgreSQL 可以執行高效的僅索引掃描
  • “凍結”所有超過特定年齡的活動行,以允許事務 ID 計數器迴繞而不會失去數據

引用自:https://dba.stackexchange.com/questions/307507