【问题标题】:What does it mean to vacuum a database?清空数据库是什么意思?
【发布时间】:2011-01-08 20:35:21
【问题描述】:

正如this Firefox bug 所引用的,清理数据库的行为是什么?是所有现代数据库软件都支持此操作,还是只有某些软件支持?

【问题讨论】:

    标签: database terminology vacuum


    【解决方案1】:

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

    【讨论】:

    • 碎片整理不是回收空间。这是关于重新排序数据以减少碎片。
    【解决方案2】:

    特指SQL lite Vacuum 命令。 http://www.sqlite.org/lang_vacuum.html

    它正在删除 DELETE 语句中剩余的空间。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          真空意味着两件事:

          1. 回收空间
          2. 碎片整理文件 [种类]

          为什么要使用真空:

          1. 当您删除表、视图、索引和触发器等数据库对象或从表中删除数据时,数据库文件的大小总是会增长,因为 SQLite 只是将删除的对象标记为空闲并保留以供将来使用。

          2. 索引和表变得碎片化,有大量的插入、更新和删除。

          3. 未使用的数据块由插入、更新和删除操作创建。

          注意事项: 不同的数据库可能会以不同的方式处理这个问题:例如在 SQLite 如果您使用非别名 rowid,VACUUM 命令将重置 rowid 值。 但如果您使用 INTEGER PRIMARY KEY 列,则 VACUUM 不会更改该列的值。

          Vacuum 需要空间来复制数据库和运行操作。

          【讨论】:

            猜你喜欢
            • 2019-12-06
            • 2019-04-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-02
            • 1970-01-01
            • 2016-10-12
            • 1970-01-01
            相关资源
            最近更新 更多