我们一直在单个unsharded实例中运行mongoDB,只有一个数据库。数据文件的大小为0.45 GB。当我查看所有集合的storageSize时,总大小约为85 MB。为了回收未使用的空间,我们运行了repairDatabase(),并了解文件大小从64增加到128到256,依此类推,直到2 GB。由于我们拥有的mongo对象数据(85 MB)可以容纳在64 + 128 MB文件中,因此我们期望回收256 MB文件。然而,令我们惊讶的是,没有回收空间。
有人能告诉我们基于哪些逻辑我们可以找到回收多少空间?基本上,给定数据库占用的总磁盘空间,并且给定总mongo对象数据大小,可以准确估计将回收多少空间?
以下是注释中请求的db.stats()输出:
> db.stats()
{
"db" : "analytics_data_1",
"collections" : 12,
"objects" : 207223,
"avgObjSize" : 353.6659347659285,
"dataSize" : 73287716,
"storageSize" : 84250624,
"numExtents" : 43,
"indexes" : 26,
"indexSize" : 21560112,
"fileSize" : 469762048,
"nsSizeMB" : 16,
"dataFileVersion" : {
"major" : 4,
"minor" : 5
},
"ok" : 1
}
>
答案 0 :(得分:2)
storage FAQ explains额外文件始终是预先分配的,一旦您开始写入,mongod
将预先分配下一个文件。
修复不会回收通常存在的任何空间 - 它只有在您删除了大量数据或删除了一些集合时才有用。
禁用预分配可以节省空间,但会降低性能,因为文件将在实际需要写入时进行分配 - 这会降低插入速度。