来自文档, 它说
“为了获得最佳性能,大部分活动集应该适合 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
?
答案1
这SO 问题/答案评论中由 quanta 链接的是正确的,“工作集”基本上是系统将活动/使用的数据和索引的数量。
db.stats()
除非您认为需要将整个数据集和整个索引都存储在 RAM 中,否则您无法判断其结果。也就是说,您可以计算出该数据库的最大工作集,但无法计算出实际的活动工作集。最大值是以下各项之和:
就您而言,根据您粘贴的输出,最大值大约为 30.45 MiB。
为了跟踪实际的内存使用情况,我建议结合db.stats()
使用免费监控工具中的数字和内存图表(特别是驻留内存) -彩信。
更新(2013 年 4 月 8 日):
2.4 版增加了工作集大小估算器到serverStatus 命令- 这只是一个估计,但它可以用作指南,并检查上面的其他数字和估计是否适合您的 MongoDB 实例。
更新(2016 年 9 月):
从我最初的回答到现在已经三年了,事情变得复杂得多——通常,获取数据和索引的大小仍然是一个很好的起点。但是,在 MongoDB 中解决问题现在将取决于您使用的存储引擎。此外,版本 3.0 删除了上面链接的 MMAP 工作集估算器,作为集合级别锁定工作的一部分(请参阅服务器-13783)现在(例如)缓存统计WiredTiger
如果您已经转向使用新引擎,则需要更换引擎。对于MMAP
,一般建议是查看页面错误度量标准作为衡量数据是否适合内存的代理。