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 小时,这对于除了非常有问题的硬件之外的任何东西来说都足够了。
我在生产中继承了一个 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 小时,这对于除了非常有问题的硬件之外的任何东西来说都足够了。