在大表上运行 VACUUM FULL之前,是否可以检查表空间中有多少可重用空间?
我有一个大的 postgres 表(大约 20G),偶尔会出现 VACUUM FULL。该驱动器上的可用空间在 15-25 GB 之间变化。在尝试每次清理之前,我会记录表大小(使用 postgres 查询)和可用磁盘空间(使用 OS 工具)。
我知道 VACUUM FULL 需要制作表格的完整副本。因此,如果表是 20G,则需要 20G 的可用空间。
有时表是 20G,只有 15G 的操作系统空间可用,而 Vacuum 可以工作。我猜需要的额外 5G 是从表空间内部恢复的。
其他时候由于空间不足,真空会失败,我猜在这些情况下,在表空间中找不到所需的额外 5G。
我希望能够事先检查我是否有足够的空间容纳 VACUUM FULL,我该怎么做?我知道表有多大,我知道操作系统有多少可用空间,但我不知道表空间中有多少可回收空间。
首先,我建议使用pgstattuple来获取元组级别的统计信息。
例如:
其次,如果您在生产环境中,我建议您使用pg_repack来回收磁盘而不锁定您的表。
例如: