在此处的上一篇文章中获得一些有见地的指导后,我将VACUUM FULL
在 4 个 PostgreSQL 9.3.10 表上运行。表大小为:
1) links_publicreply
: ~30M 行,9 列,3 个索引(类型:int、timestamp、char、bool)
2) links_reply
: ~25M 行,8 列,6 个索引(类型:int、text、timestamp、char)
3) links_link
: ~8M 行,14 列,3 个索引(类型:int、text、dbl 精度、timestamp、char bool)
4) 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
,它可以在没有排他锁的情况下实现相同的效果。有关的:
这些都不会影响备份的大小,因为它们一开始就不包括死行。