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


9

文件上

“为了获得最佳性能,您的大多数活动设备都应放在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


Answers:


9

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

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

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

在您的情况下,考虑到您粘贴的输出,该最大值约为30.45 MiB。

为了跟踪实际的内存使用情况,我建议结合使用来自db.stats()免费监控工具MMS中的图和内存图(特别是驻留内存)。

更新(04/08/2013):

2.4版向serverStatus命令添加了一个“ 工作集大小估计器 ” -这只是一个估计,但是它可以用作指南,并检查上面的其他数字和估计是否对您的MongoDB实例有意义。

更新(2016年9月):

从我的原始答案开始的三年后,事情变得更加复杂-通常,获取数据和索引的大小仍是一个很好的起点。但是,现在在MongoDB中解决问题将取决于您使用的存储引擎。此外,版本3.0删除了上面为MMAP链接的工作集估计器,作为收集级别锁定工作的一部分(请参阅SERVER-13783)。假设您已跳转到新引擎,则现在(例如)有该引擎的缓存统计信息WiredTiger作为替代。对于MMAP,一般建议将页面错误度量作为数据是否适合内存的代理。


实际上我MMS已经在使用,但是我不确定要看什么图形。
霍华德

通常,内存图上的常驻图在这里最相关。如果您的数据集显着大于RAM,它将随着时间的增长而占用所有可用的RAM(根据需要分页出较旧的数据,以便分页输入新数据)。如果不是,并且数据集是相当静态的,它将找到一个较低的级别并将其悬停在那里。我上面概述的“最大值”将是单个数据库在该图中占用的最大RAM。
亚当C

1
从MongoDB 3.0开始,serverStatus命令不再包含工作集大小估计。docs.mongodb.com/manual/reference/command/serverStatus
Vince Bowdren

1
在3-4年中,情况发生了很大变化。我已经离开了原始版本,并添加了udpate来涵盖较新版本中的某些选项。
亚当C
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.