在MongoDB上进行索引编制时。现在,我们在数据库中拥有近350 GB的数据,并将其部署为AWS EC2中的Windows服务。
我们正在为一些实验做索引。但是每次运行索引命令时,内存使用率都会达到99%,即使在索引完成后,内存使用情况仍然保持不变,直到我重新启动服务。
该实例具有30 GB的RAM和SSD驱动器。现在我们将数据库设置为独立(直到现在还没有分片)。我们正在使用最新版本的MongoDB。
任何与此相关的反馈都会有所帮助。
谢谢,
Arpan
答案 0 :(得分:3)
这是MongoDB的正常行为。
MongoDB尽可能地抓取它可以缓存每个访问文档的所有RAM。向集合添加索引时,需要读取每个文档一次以构建索引,这会导致MongoDB将每个文档加载到RAM中。然后它将它们保存在RAM中,以防您以后想要访问它们。但MongoDB不会蹲下RAM。当另一个进程需要内存时,MongoDB会自愿发布它。
the FAQ中解释了这一点:
MongoDB需要大量内存吗?
不一定。这当然是 可以在具有少量可用RAM的计算机上运行MongoDB。
MongoDB会自动使用机器上的所有可用内存 缓存。系统资源监视器显示MongoDB使用了很多 内存,但它的用法是动态的。如果突然需要另一个过程 在服务器的RAM的一半,MongoDB将为另一个提供缓存的内存 过程
从技术上讲,操作系统的虚拟内存子系统可以管理 MongoDB的记忆。这意味着MongoDB将使用尽可能多的可用内存 尽可能根据需要交换到磁盘。具有足够内存的部署 在RAM中适应应用程序的工作数据集将达到最佳效果 性能
另请参阅:FAQ: MongoDB Diagnostics以获取其他问题的答案 关于MongoDB和内存的使用。