在删除大量表数据后,不同表存储中约 3500 万条记录从 41GB 跃升至 89GB,这与预期完全相反。知道会发生什么吗?
数据库是 PostgreSQL。
答案 0 :(得分:2)
来自docs:
<块引用>在 PostgreSQL 中,行的 UPDATE 或 DELETE 不会立即删除该行的旧版本。这种方法对于获得多版本并发控制(MVCC,参见第 13 章)的好处是必要的:当行版本仍然可能对其他事务可见时,不得删除它。但最终,任何事务都不再对过时或已删除的行版本感兴趣。然后必须回收它占用的空间以供新行重用,以避免磁盘空间需求的无限增长。这是通过运行 VACUUM 来完成的。
此外,Write-Ahead Logging 是大小增加的原因,因为 PostgreSQL 在您运行删除操作时创建了额外的日志。
PostgreSQL 自动执行例程 autovacuum
,应该能够释放空间。如果您想手动回收空间,您可以使用 VACUUM
或 VACUUM FULL
来完成,您可以阅读有关 here 的更多信息并决定哪个更适合您。