Postgresql
VACUUM FULL 回收空間所用的時間
在此處的上一篇文章中獲得一些有見地的指導後,我將
VACUUM FULL
在 4 個 PostgreSQL 9.3.10 表上執行。表大小為:
links_publicreply
: ~30M 行,9 列,3 個索引(類型:int、timestamp、char、bool)
links_reply
: ~25M 行,8 列,6 個索引(類型:int、text、timestamp、char)
links_link
: ~8M 行,14 列,3 個索引(類型:int、text、dbl 精度、timestamp、char bool)
links_user_sessions
: ~2M 行,7 列,4 個索引(類型:int、text、timestamp、inet)這是我第一次嘗試回收磁碟空間。這是本地社交網站的繁忙伺服器。沒有時間實際上是“停機時間”。但最不忙的是~4:00 AM,所以我將使用視窗。
根據經驗,你們對我指出的 4 張桌子需要多長時間 VACUUM FULL 有什麼看法嗎?我想在網站上發布“維護中,直到 xx:xx:xx”消息。我知道沒有人可以確定,但是這種確定性足以讓你形成一個大致的意見嗎?
其次,為了讓我們在同一頁面上,我在 psql 上執行的命令很簡單
VACUUM (FULL, VERBOSE, ANALYZE) link_publicreply;
(等等),對嗎?不想搞砸了。
這是本地社交網站的繁忙伺服器。沒有時間實際上是“停機時間”。
這
VACUUM FULL
將是一個問題,因為它在它處理的每個表上都需要一個排他鎖。考慮一下社區工具pg_repack
,它可以在沒有排他鎖的情況下實現相同的效果。有關的:
這些都不會影響備份的大小,因為它們一開始就不包括死行。