有a dbstats call in MongoDB可以为您提供磁盘上数据库的真实大小fileSize。但是,dbstats不适合用于生产,因为it blocks the database server while it runs, and it can run for a long time。 a 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这个数据库浏览器,它不能假定直接访问文件系统。
答案 0 :(得分:0)
这是预期的。
存储大小是文档内部分配的空间量。 MongoDB会自动将填充添加到实际文档大小,以使更新不需要在磁盘上移动。
FileSize是主机操作系统文件系统中磁盘上分配的空间量(包括预分配空间)。数据文件按每个数据库分配,从64 MB开始,大小加倍,直到达到2 GB(之后每个后续数据文件的大小为2 GB)。数据文件的命名格式为dbname.0,dbname.1 ...
要找到您可以使用的文件大小,只需在所有数据文件上使用linux命令(ls -l,du -h等)并总结值,或者您可以使用du -ch regex 找到所有这些的组合值。