PostgreSQL:VACUUM FULL 持续时间估计

daj*_*ood 8 sql postgresql vacuum postgresql-10

我在生产中继承了一个 PostgreSQL 数据库,其中有一张大小约为 250 GB 的表。它只有大约一万行,我估计不超过 20 MB。

AUTOVACUUM由于某个时间已关闭,该表变得如此大。(我知道为什么这样做。它将被重新激活,原始问题已得到解决,所以这不是问题的一部分。)

我们的问题是许多查询需要很长时间。例如,aSELECT count(*) FROM foo;大约需要 15 分钟。

现在,在考虑了其他选项之后,我想VACUUM FULL在桌面上运行一个。我尝试估计完成此操作所需的持续时间,以便我可以计划维护时段。

根据我的理解,VACUUM FULL创建一个新表,将所有活动元组复制到其中,并用此副本替换原始表。

我的估计是,这个过程不会比像上面这个表上的简单查询花费更长的时间,因为实时数据的总体大小和数量都非常小。

您是否同意我对“VACUUM FULL”的运行时间的期望在某种程度上是现实的?如果没有,为什么不呢?

是否有估计VACUUM FULL持续时间的最佳实践?

Lau*_*lbe 8

唯一可靠的估计可以通过在类似的机器上恢复文件系统备份并对其进行测试来获得。这就是我所推荐的。

持续时间不仅取决于大小,还取决于膨胀量:如果实际数据较少,速度会更快。

也就是说,我会要求 2 小时的维护窗口,这对于除了非常有问题的硬件之外的任何东西来说都应该足够了。

  • 事实证明,2 小时的维护窗口就足够了。“VACUUM FULL”耗时 72 分钟。之后,表大小为 19 MB。谢谢 :) (6认同)