Postgres - 执行 VACUUM 需要多少空间

Con*_*bil 4 postgresql performance postgresql-performance

我知道在表上执行 VACUUM FULL 将释放磁盘空间并将其返回给操作系统。

有几次我的操作系统(Windows)警告我它的磁盘空间不足。我的反应是迅速关闭我所能做的一切,并在其中一个更活跃的表上运行 VACUUM FULL。

我注意到 VACUUM FULL 似乎需要至少几百 MB 的空闲空间才能实际工作。如果我在只有 50 MB 的磁盘空间时尝试在 1GB 的表上执行 VACCUM FULL,那么这很快就会消失,我的计算机很快就会停止,而 VACUUM FULL 将无法工作。

当我知道有未使用的空间可用但没有足够的空间来运行 VACUUM 时,如何释放 POSTGRES 数据库中的操作系统空间?

(我知道正确的答案是——“不要傻到一开始就让它发生”,但 sh1t 偶尔会发生!)

Cra*_*ger 5

执行 VACUUM 需要多少空间

最坏的情况pg_total_relation_size(table) * 2。通常少很多,因为新表和索引明显更紧凑。

当我知道有未使用的空间可用但没有足够的空间来运行 VACUUM 时,如何释放 POSTGRES 数据库中的操作系统空间?

清理卷上不相关的文件。删除一些不需要的表或索引。将表或索引移动到其他存储上的其他表空间。扩大基础卷。

在不首先需要分配更多空间的情况下,并没有真正的好方法来将就地和可用空间压缩到操作系统。我想大多数人都同意这是一个缺陷,但似乎没有人足够关心以开发任何改进。