您需要的内存大小取决于几个因素,包括但不限于:
· 数据库存储和 working set 之间的关系。
· 操作系统的 LRU 缓存淘汰策略(最近最少使用)
· Journaling 预写日志的影响
· page fault (缺页中断)的数量或速率以及其他 MongoDB Cloud Manager 检测发现何时需要更多的内存
· 每个数据库连接线程最多需要 1 MB 的 RAM 。
从磁盘加载数据到内存时, MongoDB 交给操作系统进行。它只是通过内存映射其所有数据文件,并依赖于操作系统来缓存数据。当内存不足时,操作系统通常会从内存中驱逐最近最少使用的数据。例如,如果客户端访问索引比访问文档更频繁,则索引更可能保留在内存中,但这取决于您的特定用法 。
要计算所需的内存大小,您必须计算 working set 大小或客户最常使用的数据部分。这取决于您的访问模式,您拥有的索引以及文档的大小。由于 MongoDB 每个连接使用一个线程,因此每个数据库连接也需要最多 1 MB 的内存,无论是活动还是空闲 。
如果 page fault 很少发生,那么表示您的 working set 就能放入内存。如果 page fault 数量比较高,则可能会降低性能。对于 SSD 固态硬盘而言,这个影响相比机械磁盘就不那么重要了 。