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

How*_*ard 10 nosql 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
}
Run Code Online (Sandbox Code Playgroud)

哪个值是working set size

Ada*_*m C 10

评论中 quanta 链接的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,一般建议是将页面错误指标视为您的数据是否适合内存的代理。