PostgreSQL:VACUUM FULL 持续时间估计

PostgreSQL: VACUUM FULL duration estimation

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

table 增长到这样的大小是因为 AUTOVACUUM 在某个时候被关闭了。 (我知道为什么这样做了。它会被重新激活,原来的问题已经解决,所以这是不是问题的一部分。)

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

现在考虑其他选项后,我想 运行 VACUUM FULL 上 table。我尝试估计完成此操作所需的时间,以便我可以计划维护 window.

根据我的理解,VACUUM FULL 创建一个新的 table,将所有活动元组复制到它并用这个副本替换原来的 table。

我估计此过程不会比上面 table 上的简单查询花费的时间长很多,因为实时数据的总体大小和数量都非常少。

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

是否有估算 VACUUM FULL 持续时间的最佳做法?

唯一可靠的估计是在类似的机器上恢复文件系统备份并进行测试。这就是我的建议。

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

即是说,我要求维护 window 2 小时,这对于除了非常有问题的硬件之外的任何东西来说都足够了。