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

问题描述 投票:4回答:3

我用过这个命令

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,以便性能远远不够。

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

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

请提前建议,谢谢。

mongodb
3个回答
5
投票

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

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


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 sethttps://docs.mongodb.com/manual/faq/diagnostics/#memory-diagnostics-for-the-wiredtiger-storage-engine

Memory Diagnostics for the WiredTiger Storage Engine

我的工作尺寸必须适合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 RAM的系统上,WiredTiger缓存将使用1.5GB的RAM(0.5 *(4 GB - 1 GB)= 1.5 GB)。相反,一个总共1.25 GB RAM的系统将为WiredTiger缓存分配256 MB,因为这超过总RAM的一半减去1 GB(0.5 *(1.25 GB - 1 GB)= 128 MB <256 MB) 。


2
投票

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

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

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

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

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

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

资料来源:MongoDb FAQ

© www.soinside.com 2019 - 2024. All rights reserved.