如何确定MongoDB服务器的RAM大小

时间:2013-08-28 09:50:57

标签: mongodb

我使用了命令

db.collection.stats()

db.stats()
{
        "collections" : 17,
        "objects" : 487747,
        "avgObjSize" : 1924.9327048654322,
        "dataSize" : 938880152,
        "storageSize" : 1159314432,
        "numExtents" : 82,
        "indexes" : 32,
        "indexSize" : 153812992,
        "fileSize" : 8519680000,
        "ok" : 1
}

从网上我发现了这个陈述

索引应该始终在内存中。(这只是RAM)

索引大小为153812992,数据大小为938880152

您能否告诉我MongoDB服务器需要多少RAM,以便性能良好。

根据应用程序设计,可能会发生近100k次插入/更新,而我还有一个问题是,这个索引大小每天都会增长吗?

那么在这种情况下,我如何确定我的应用程序的最佳RAM大小。

请提前建议,谢谢。

3 个答案:

答案 0 :(得分:5)

MongoDB的更高版本中有一个工具可帮助您找出工作集的大小,它仍然具有实验性,但应该可以正常工作:http://docs.mongodb.org/manual/reference/command/serverStatus/#serverStatus.workingSet

使用它的最佳方法是创建一个自动化测试脚本,该脚本将使用您的应用程序,同时打印出serverStatus并存档工作集文档的值。你可以绘制图形等等,并得出你的RAM需要的合理结论。

答案 1 :(得分:5)

有关MongoDB的事情多年来发生了变化。 今天MongoDB说:

  

在版本3.0中更改:serverStatus不再输出workingSet

TL; DR

如果在MongoDB上使用MMAPv1存储引擎,则working set 存在https://docs.mongodb.com/manual/faq/diagnostics/#must-my-working-set-size-fit-ram

如果在MongoDB上使用WiredTiger存储引擎,无需考虑working set https://docs.mongodb.com/manual/faq/diagnostics/#memory-diagnostics-for-the-wiredtiger-storage-engine

  

WiredTiger存储引擎的内存诊断

     

我的工作集大小是否适合RAM?

     

没有

     

如何计算应用程序需要多少RAM?

     

使用WiredTiger,MongoDB同时使用WiredTiger内部缓存   和文件系统缓存。

     

在版本3.2中更改:从MongoDB 3.2开始,即WiredTiger   默认情况下,内部缓存将使用较大的一个:

     

60%的RAM减去1 GB或1 GB。


更新

  

从3.4开始,默认情况下,WiredTiger内部缓存将使用   两者中较大者:

     

50%(RAM - 1 GB)或256 MB。例如,在具有总计的系统上   4GB内存的WiredTiger缓存将使用1.5GB的RAM(0.5 *(4 GB    - 1 GB)= 1.5 GB)。相反,一个总共1.25 GB RAM的系统将为WiredTiger缓存分配256 MB,因为这超过了   总RAM的一半减去1千兆字节(0.5 *(1.25 GB - 1 GB)= 128   MB< 256 MB)。

答案 2 :(得分:2)

您的工作集应留在内存中以获得良好的性能。否则会发生许多随机磁盘IO。

MongoDB数据库的工作集是客户端最常访问的数据部分。您可以使用

估算工作集的大小
  

db.runCommand({serverStatus:1,workingSet:1})

在SO级别。查看页面错误的数量或速率以及其他MMS量表,以便在需要更多RAM时进行检测。

如果页面错误很少发生,则您的工作集适合RAM。如果故障率高于此值,则可能会降低性能。

在管理工作集大小时要特别注意的一个方面是索引访问模式。如果要在随机位置插入索引(就像哈希随机生成的id一样),您将不断更新整个索引。如果您能够以近似升序创建您的ID(例如,与随机ID连接的日),则所有更新将发生在b树的右侧,并且索引页的工作集大小将会很多小。

来源:MongoDb FAQ