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

Paw*_*wan 4 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
}
Run Code Online (Sandbox Code Playgroud)

从网上我发现了这句话

索引应始终在内存中。(RAM除外)

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

您能告诉我我的MongoDB服务器上需要多少RAM,这样性能就很好了。

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

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

请指教,预先感谢。

Sam*_*aye 5

MongoDB的更高版本中提供了一个工具来帮助确定您的工作集有多大,虽然它仍处于试验阶段,但应该可以工作:http : //docs.mongodb.org/manual/reference/command/serverStatus/ #serverStatus.workingSet

最好的使用方法是简单地制作一个自动测试脚本,该脚本将使用您的应用程序,同时打印serverStatus并存档工作集文档的值。您可以将其绘制成图形等,从而得出合理的RAM需要量。

  • 在版本3.0中进行了更改:服务器状态输出不再包含workingSet有人知道3.0的解决方案吗? (2认同)

efk*_*kan 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

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 RAM的系统上,WiredTiger缓存将使用1.5GB RAM(0.5 *(4 GB-1 GB)= 1.5 GB)。相反,总内存为1.25 GB的系统将为WiredTiger缓存分配256 MB,因为这是总RAM的一半以上减去一GB(0.5 *(1.25 GB-1 GB)= 128 MB <256 MB) 。

  • 你是对的。它必须已在文档中更新。 (2认同)