MongoDB2.6.8用mongodump备份okapp库后文件远小于实际库大小问题
MongoDB备份文件远小于show dbs统计值的原因
- show dbs统计的是磁盘占用而非实际数据大小
MongoDB 2.6默认使用MMAPv1存储引擎,该引擎会预先分配连续的磁盘空间给数据文件,避免频繁磁盘分配带来的性能损耗。同时删除文档、触发文档移动的更新操作产生的空闲磁盘空洞,不会被立刻释放给操作系统,会被MongoDB预留复用。这两部分空间都会被计入show dbs的统计结果,但mongodump仅导出当前实际存在的有效文档,不会备份空闲空间。 - 索引统计规则差异
show dbs的统计值包含所有集合已构建的索引物理文件占用的空间,而mongodump仅备份索引的创建规则(存储在.metadata.json文件中),不会备份索引实体数据,索引会在mongorestore恢复时根据规则重新生成,若你的库之前存在大量大体积索引,这部分的空间差可达数GB。 - 存储引擎额外开销被剔除
MMAPv1为了优化性能,会为每个文档预留填充空间避免后续文档变长需要移动位置,同时存储引擎本身还有大量元数据管理开销,这些都会计入磁盘占用。但mongodump导出的是紧凑的纯BSON文档数据,不会包含这些存储层的额外开销。
你可以执行db.stats()命令验证:返回结果中的dataSize字段是实际有效数据的大小,会和你备份的7.7MB接近,fileSize字段就是数据库实际磁盘占用大小,和show dbs显示的6.497GB一致。
内容的提问来源于stack exchange,提问作者markzhu
相关产品推荐
相关产品推荐

