1

我们一直在单个非分片实例中运行 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
}
>
4

1 回答 1

2

存储常见问题解答解释说,总是预先分配一个额外的文件,一旦您开始写入它,mongod就会预先分配下一个文件。

修复不会回收通常存在的任何空间 - 只有在您删除大量数据或删除一些集合时才会有所帮助。

禁用预分配可以节省空间,但会降低性能,因为文件将在实际需要写入时分配 - 这会减慢插入速度。

于 2013-11-13T09:44:12.097 回答