我有一个CloudSQL实例(PostgreSQL),其中包含112.7 GB数据:
我想将此实例中的数据传输到另一个。
我先导出,然后创建另一个实例,然后将数据导入那里。
一切顺利。但是,生成的实例的存储使用量较少,只有102 GB:
在日志中找不到错误。我想知道10GB数据去了哪里。
这是预期的吗?
答案 0 :(得分:0)
这是由于表中的碎片导致的。对于MySQL:
碎片的一个症状是表占用的空间比它大 “应该采取。到底有多少是很难确定的。 所有的InnoDB数据和索引都存储在B树中,并填充它们 系数可能从50%到100%不等。碎片化的另一个症状是 这样的表扫描比“应该”花费更多的时间 拿......
在PostgreSQL docs中(请参见 23.1.2。恢复磁盘空间部分),说明以下内容:
在PostgreSQL中,行的UPDATE或DELETE不会立即 删除该行的旧版本。这种方法对于获得 多版本并发控制的优点(MVCC,请参见Chapter 13):行版本仍然可能删除时,不能删除 其他交易可见。但是最终,过时或删除了 行版本不再对任何交易有意义。空间吧 然后必须将占用的资源回收以供新行重用,以避免 磁盘空间需求无限增长。这是通过运行来完成的 真空。
还请阅读Vacuum the Dirt out of Your Database文档,以查看克服此问题的步骤。
希望这会有所帮助。