真空数据库是什么意思?

时间:2010-01-24 19:13:21

标签: database terminology vacuum

正如this Firefox bug所引用的那样,抽真空数据库的行为是什么?所有现代数据库软件或仅某些现有数据库软件是否支持此操作?

5 个答案:

答案 0 :(得分:34)

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

答案 1 :(得分:5)

具体是指SQLite vacuum命令。 http://www.sqlite.org/lang_vacuum.html

它正在删除DELETE语句留下的空间。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

真空意味着2件事:  1.回收空间  2.碎片整理文件[种类]

为什么使用吸尘器: 1.删​​除表,视图,索引和触发器等数据库对象或从表中删除数据时,数据库文件的大小始终会增加,因为SQLite只是将已删除的对象标记为空闲并将其保留以供将来使用。

2个索引和表变得零散,具有大量的插入,更新和删除。

  1. 未使用的数据块是通过插入,更新和删除操作创建的。

注意事项: 不同的数据库可能会对此进行不同的处理:例如在SQLite中 如果您使用无别名的rowid,则VACUUM命令将重置rowid值。 但 如果您使用INTEGER PRIMARY KEY列,则VACUUM不会更改该列的值。

真空需要空间来复制数据库并运行操作