2010-01-24 64 views

回答

28

使用MVCC隔离彼此事务的数据库需要定期扫描表以删除过时的行副本。在MVCC中,当一行被更新或删除时,它不能被立即回收,因为可能有活动的事务仍然可以看到该行的旧版本。而不是检查是否是这种情况,这可能是相当昂贵的,旧行被假定保持相关。回收空间的过程被推迟到表被抽真空为止,这取决于数据库,可以自动或明确地启动。

0

这与碎片整理文件系统非常相似。更多关于PGSQL docs的信息。

+2

碎片整理不是回收空间。这是关于重新排序数据以减少碎片。 – 2010-01-24 19:29:23

1

'vacuumdb'位于MySQL,sqlite和PostgreSQL中。在Postgres中,vacuumdb标识被删除的行占据的空间并将其编目以供将来使用。 'vacuum full'进行更全面的检查,并将记录移入新创建的空间。