Space 需要 VACUUM FULL table

Space required for VACUUM FULL table

关于完全真空的 PostgreSQL 10.4 手册:

Note that they also temporarily use extra disk space approximately equal to the size of the table, since the old copies of the table and indexes can't be released until the new ones are complete

我在许多不同的地方读过这篇文章,并以各种方式表达。一些表示所需的 space 最多等于已清理的 table 的大小。暗示它可能只需要足够的 space 来存储结果 vacuumed table,即大小在 [0-size_of_original_table] 范围内,具体取决于 [=23= 中有多少死行].

我的问题是:对 table 进行完全真空处理是否总是需要 space 等于原始 table 大小,或者它是否取决于活动行数table?

VACUUM (FULL) 所需的额外 space 取决于 table.

中的 live 行数

VACUUM (FULL) 期间发生的事情是写入 table 的新副本。 所有活动元组(= 行版本)和无法删除的死元组都将写入此新副本。

交易完成后,旧副本将被删除。

建议空闲 space 至少等于数据库中最大 table 的大小。

即,如果您的数据库大小为 10GB,并且数据库中的最大 table 大小为 2GB。那么您的磁盘上必须至少有 2GB 的额外空间 space,才能成功完成 vacuum。

因为VACUUM FULL 将创建table 的新副本,排除死行,然后删除现有的table。