我可以在不使用dbstats的情况下为MongoDB数据库计算fileSize吗?

时间:2012-04-26 19:13:17

标签: mongodb size filesize

a dbstats call in MongoDB可以为您提供磁盘上数据库的真实大小fileSize。但是,dbstats不适合用于生产,因为it blocks the database server while it runs, and it can run for a long timea collstats call据称是安全的(对于同事而言),但其返回值没有fileSize成员,只有storageSize成员。这是an explanation of dbstats().dataSize, fileSize, and storageSize,声称storageSize和fileSize不同。 doc含糊不清,但我已经凭经验证实了这一点:

> 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
}
>

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

更新:我特意寻找服务器API。我的用例是将磁盘使用情况统计信息添加到Mongs这个数据库浏览器,它不能假定直接访问文件系统。

1 个答案:

答案 0 :(得分:0)

这是预期的。

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

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

要找到您可以使用的文件大小,只需在所有数据文件上使用linux命令(ls -l,du -h等)并总结值,或者您可以使用du -ch regex 找到所有这些的组合值。