我已经使用了命令
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大小。
请指教,预先感谢。
MongoDB的更高版本中提供了一个工具来帮助确定您的工作集有多大,虽然它仍处于试验阶段,但应该可以工作:http : //docs.mongodb.org/manual/reference/command/serverStatus/ #serverStatus.workingSet
最好的使用方法是简单地制作一个自动测试脚本,该脚本将使用您的应用程序,同时打印serverStatus并存档工作集文档的值。您可以将其绘制成图形等,从而得出合理的RAM需要量。
多年以来,有关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 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) 。