2

MongoDB 中有一个 dbstats 调用,它为您提供磁盘上数据库的真实大小,即 fileSize。但是,dbstats 不适合在生产中使用,因为它在运行时会阻塞数据库服务器,并且可以运行很长时间。有一个据称是安全的 collstats 调用(根据同事),但它的返回值没有 fileSize 成员,只有 storageSize 成员。这是对 dbstats().dataSize、fileSize 和 storageSize 的解释,声称 storageSize 和 fileSize 是不同的。该文档模棱两可,但我已经根据经验证实了差异:

> MB = Math.pow(2, 20)
> db.stats(MB)
{
    "db" : "somedb",
    "collections" : 11,
    "objects" : 68200,
    "avgObjSize" : 1153.922991202346,
    "dataSize" : 75,
    "storageSize" : 117,
    "numExtents" : 34,
    "indexes" : 17,
    "indexSize" : 8,
    "fileSize" : 448,
    "nsSizeMB" : 16,
    "ok" : 1
}
>

有没有办法在不阻塞服务器 15 分钟的情况下使用服务器 API 计算磁盘上 MongoDB 数据库的真实大小?

更新:我正在专门寻找服务器 API。我的用例是向数据库浏览器Mongs添加磁盘使用统计信息,它不能假设直接文件系统访问。

4

1 回答 1

0

这是意料之中的。

存储大小是内部为文档分配的空间量。MongoDB 自动将填充添加到实际文档大小,以使更新不需要在磁盘上移动。

FileSize 是主机操作系统文件系统中磁盘上分配的空间量(包括预分配空间)。数据文件以每个 DB 为基础分配,从 64 MB 开始,大小翻倍,直到达到 2 GB(之后每个后续数据文件的大小为 2 GB)。数据文件的命名格式为 dbname.0, dbname.1 ...

要查找文件大小,您可以简单地对所有数据文件使用 linux 命令(ls -l、du -h 等)并对值求和,或者您可以使用 du -ch正则表达式来查找所有数据文件的组合值.

于 2012-04-26T20:29:08.190 回答