如何获得MongoDB的当前工作集大小

从文件 ,它说

“为了获得最佳性能,大部分活动集合应该放在RAM中。”

所以例如,我的db.stats()给我

 { "db" : "mydb", "collections" : 16, "objects" : 21452, "avgObjSize" : 768.0516501957859, "dataSize" : 16476244, "storageSize" : 25385984, "numExtents" : 43, "indexes" : 70, "indexSize" : 15450112, "fileSize" : 469762048, "ok" : 1 } 

哪个值是working set size

Quanta在注释中链接的SO问题/答案是正确的,“工作集合”基本上是您的系统正在使用/正在使用的数据和索引的数量。

除非你认为你需要将整个数据集和整个索引放在RAM中,否则你不能从db.stats()得知。 也就是说,您可以计算出该数据库的最大工作集,而不是实际的活动工作集。 最大值是以下总和:

  1. dataSize – 数据库中保存的数据的总大小
  2. indexSize – 在此数据库上创build的所有索引的总大小

在你的情况下,考虑到你粘贴的输出,这个最大值将是大约30.45 MiB。

为了跟踪实际的内存使用情况,我build议使用db.stats()中的数字和免费监视工具MMS中提供的内存图(特别是驻留内存)的组合。

更新(04/08/2013):

2.4版在serverStatus命令中增加了一个工作集大小估计器 – 这只是一个估计值,但它可以作为指导,检查上面的其他数据和估计值是否适合MongoDB实例。

更新(2016年9月):

从我原来的答案开始三年,事情变得复杂得多 – 一般来说,获取数据的大小和索引是一个很好的起点。 但是,在MongoDB中搞清楚现在取决于你正在使用的存储引擎。 此外,版本3.0删除了上面链接的MMAP的工作集估算器,作为集合级别locking工作的一部分(请参阅SERVER-13783 )。 现在(例如) WiredTiger引擎的caching统计信息作为替代,假设您已经跳转到新的引擎。 对于MMAP ,一般的build议是将页面错误度量作为数据是否适合内存的代理。