代码之家  ›  专栏  ›  技术社区  ›  Jahongir Rahmonov

导入后cloudsql实例的存储使用率较低

  •  0
  • Jahongir Rahmonov  · 技术社区  · 7 年前

    我有一个cloudsql实例(postgresql),其中包含112.7gb的数据:

    enter image description here

    我想将这个实例中的数据传输到另一个实例中。

    我先做了一个导出,然后创建了另一个实例并在那里导入了数据。

    一切顺利。但是,结果实例的存储使用率较低,仅为102 GB:

    enter image description here

    日志中未发现错误。我想知道10gb的数据去了哪里。

    这是预期的吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Manuel Perez Heredia    7 年前

    这是由于表中的碎片造成的。在这种情况下 MySQL 以下内容:

    碎片化的一个症状是表占用的空间比它多 应该接受。具体是多少,很难确定。 所有innodb数据和索引都存储在b树中,并且它们的填充 系数可能在50%到100%之间变化。碎片化的另一个症状是 像这样的表扫描要花比应该花更多的时间 拍摄:…

    PostgreSQL docs (见章节 23.1.2条。恢复磁盘空间 ),说明如下:

    在postgresql中,行的更新或删除不会立即执行 删除行的旧版本。这种方法是必要的 多版本并发控制(MVCC)的好处,请参见 Chapter 13 ):当行版本仍然可能是 对其他交易可见。但最终,一个过时的或被删除的 行版本不再对任何事务感兴趣。它的空间 然后必须回收占用以供新行重用,以避免 磁盘空间需求的无限增长。这是通过跑步来完成的 真空。

    也请阅读 Vacuum the Dirt out of Your Database 为了看到克服这一点的步骤。

    希望这有帮助。