【发布时间】:2014-11-15 20:00:25
【问题描述】:
我使用 Mongo GridFS,我有一个相当大的 Mongo 数据库,当我使用 db.stats() 命令时,当前 dataSize 为 89GB。
当我在文件系统中创建 mongo 转储时,目录大小为 86GB,当我在另一台机器上恢复数据库并运行 db.stats() 时,我现在得到 122GB。
有谁知道转储/恢复后数据大小增加 33GB 背后的原因是什么?
编辑 这是来自初始数据库的统计数据
MongoDB shell version: 2.4.5
connecting to: imgdb
rs0:PRIMARY> db.stats();
{
"db" : "imgdb",
"collections" : 4,
"objects" : 2549884,
"avgObjSize" : 37802.88397276111,
"dataSize" : 96392968996,
"storageSize" : 363433842080,
"numExtents" : 207,
"indexes" : 4,
"indexSize" : 307245904,
"fileSize" : 366974337024,
"nsSizeMB" : 16,
"dataFileVersion" : {
"major" : 4,
"minor" : 5
},
"ok" : 1
}
这里是恢复数据库的统计数据
MongoDB shell version: 2.6.4
connecting to: imgdb
dbdb.stats();
{
"db" : "imgdb",
"collections" : 4,
"objects" : 2549924,
"avgObjSize" : 51781.40103312883,
"dataSize" : 132038637248,
"storageSize" : 132281756768,
"numExtents" : 98,
"indexes" : 4,
"indexSize" : 199976784,
"fileSize" : 135159349248,
"nsSizeMB" : 16,
"dataFileVersion" : {
"major" : 4,
"minor" : 5
},
"extentFreeList" : {
"num" : 0,
"totalSize" : 0
},
"ok" : 1
}
以下是对可能原因的一些想法:
- 出于某种原因,我在恢复的版本中多了 40 个对象!
- 不同的 mongo 版本,这可能是索引算法发生变化的原因吗?
- 初始数据库位于副本集中
- 最初的数据库曾经是 320 GB,但我进去并压缩了所有图像,不久前将其减少到 75 GB。这就是为什么初始数据库的存储大小要大得多的原因
【问题讨论】:
-
如果你转储那个 122GB 的数据库会发生什么?它会给你另一个 86GB 的转储吗?包括来自
db.stats()的其他数字可能会帮助人们解释这些数字。阅读dbStats和padding factor 可能也有用。由于索引、簿记、增长空间等原因,数据库的大小永远不会是它包含的数据的大小…… -
我正在转储 122GB 数据库,我很快就会得到这些信息
-
这应该只需要几秒钟,对吧?我记得当一个 GB 很多时,现在我的手机口袋里有几个。查看
db.stats()中的其他数字和填充因子;我的 MongoDB DBA 技能不是很好,但我怀疑这两件事会消除很多困惑。 -
据我所知,转储并没有被压缩,这很奇怪,最大应该是旧数据库的大小
-
@muistooshort 花了一段时间,大约 45 分钟。但最后我的数据转储又回到了 86GB!
标签: mongodb gridfs mongodump mongorestore