VACUUM FULL桌子所需的空间

时间:2018-07-16 12:06:32

标签: postgresql postgresql-10 vacuum

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

  

请注意,它们还临时使用大约等于表大小的额外磁盘空间,因为表和索引的旧副本无法   直到新版本完成为止

我已经在许多不同的地方阅读过该文章,并以多种方式进行了表述。一些表示所需空间最多等于真空吸盘的大小。提示它可能只需要足够的空间来存储所得的已清理表,即,其大小在[0-size_of_original_table]范围内,具体取决于表中有多少死行。

我的问题是:完全清理表是否总是需要一个等于原始表大小的空间,还是取决于表中活动行的数量?

2 个答案:

答案 0 :(得分:3)

VACUUM (FULL)所需的额外空间取决于表中活动行的数量。

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

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

答案 1 :(得分:0)

建议可用空间至少等于数据库中最大表的大小。

即,如果您的数据库大小为10GB,并且数据库上的最大表大小为2GB。然后,您的磁盘上必须至少有2GB的额外空间,才能成功完成清理。

因为 VACUUM FULL (真空已满)将创建表的新副本(不包括无效行),然后删除现有表。