我继承了一个生产环境中的 PostgreSQL 数据库,其中有一张表大小约为 250 GB。它只有大约一万行活跃数据,我估计不超过 20 MB。
由于某些原因,
现在,在考虑其他选项之后,我想在该表上运行
据我了解,
我的估计是,由于活动数据总体上的大小和数量相对较小,因此此过程所需的时间不会比上述简单查询在该表上执行的时间长得多。
您是否认为我的“VACUUM FULL”运行时间期望值是合理的?如果不是,请说明原因。
有没有估算
由于某些原因,
AUTOVACUUM
在某个时间被关闭,导致该表增长到如此庞大的规模。(我知道为什么会这样做。它将重新激活,并且已经修复了原始问题,因此这不是问题的一部分。)
我们的问题在于许多查询需要很长时间。例如,SELECT count(*) FROM foo;
大约需要 15 分钟。现在,在考虑其他选项之后,我想在该表上运行
VACUUM FULL
。我尝试估计完成所需的时间,以便可以计划维护窗口。据我了解,
VACUUM FULL
创建一个新表,将所有活动元组复制到其中,并用此副本替换原始表。我的估计是,由于活动数据总体上的大小和数量相对较小,因此此过程所需的时间不会比上述简单查询在该表上执行的时间长得多。
您是否认为我的“VACUUM FULL”运行时间期望值是合理的?如果不是,请说明原因。
有没有估算
VACUUM FULL
所需时间的最佳实践?