【问题标题】:Memory usage remains 99 % even after create index is done on MongoDB Collection即使在 MongoDB 集合上完成创建索引后,内存使用率仍保持 99%
【发布时间】:2014-03-27 10:52:40
【问题描述】:

在 MongoDB 上进行索引时。现在我们在数据库中有近 350 GB 的数据,并将其作为 Windows 服务部署在 AWS EC2 中。

我们正在为一些实验做索引。但是每次我运行索引命令时,内存使用率都会达到 99%,即使在索引完成后,内存使用率也会保持这种状态,直到我重新启动服务。

该实例具有 30 GB 的 RAM 和 SSD 驱动器。现在我们将数据库设置为独立的(直到现在还没有分片)。而且我们使用的是最新版本的 MongoDB。

任何与此相关的反馈都会有所帮助。

谢谢,

阿潘

【问题讨论】:

  • 这是正常的预期行为。任何未使用的内存都是浪费内存。

标签: mongodb


【解决方案1】:

这是 MongoDB 的正常行为。

MongoDB 会获取所有可以获取的 RAM,以尽可能长时间地缓存每个访问的文档。当您向集合添加索引时,每个文档都需要读取一次以构建索引,这会导致 MongoDB 将每个文档加载到 RAM 中。然后它将它们保存在 RAM 中,以防您以后想要访问它们。但是 MongoDB 不会占用 RAM。当另一个进程需要内存时,MongoDB会心甘情愿地释放它。

这在the FAQ中有解释:

MongoDB 是否需要大量 RAM?

不一定。当然是 可以在具有少量可用 RAM 的机器上运行 MongoDB。

MongoDB 自动使用机器上的所有空闲内存作为它的 缓存。系统资源监视器显示 MongoDB 使用了大量 内存,但它的使用是动态的。如果另一个进程突然需要 服务器内存的一半,MongoDB 将缓存内存给另一个 过程。

从技术上讲,操作系统的虚拟内存子系统管理 MongoDB的内存。这意味着 MongoDB 将使用尽可能多的空闲内存 尽可能地根据需要交换到磁盘。具有足够内存的部署 将应用程序的工作数据集放在 RAM 中将达到最佳效果 性能。

另请参阅:FAQ: MongoDB Diagnostics 以获取其他问题的答案 关于 MongoDB 和内存使用。

【讨论】:

  • 好的。谢谢(你的)信息。我对 MongoDB 非常陌生,我们计划将我们的数据库用作 MongoDB。但是想想 99% 的 RAM 被 Mongo 占用了,如果那个时候我们做一些快速的插入和获取,会导致机器变慢吗?谢谢
  • @user3350562 当您为集合 A 创建索引然后访问集合 B 时,A 的内容可能已经取代了 B 中的任何缓存文档,因此它们都需要从硬盘驱动器中读取。但这是在任何使用缓存的系统中都难以避免的缓存混淆。 RAM 使用本身根本不是问题,因为正如我所写和 FAQ 所写,MongoDB 将在系统需要它用于其他事情时释放 RAM。 MongoDB 只会抓取当前未使用的 RAM。
  • 感谢您的 cmets。真的很有帮助。
  • 我需要你们提供更多信息。我们正计划将我们的旧系统数据 (SQL SERVER) 迁移到云和我们认为是 Mongo 的数据存储。截至目前,我们有 1 TB 的数据,目前我们已经在 Mongo 中插入了 350 GB 的数据进行测试,其中包含近 1500 万个文档。数据库必须能够以非常快的速度同时提供插入和提取服务。你们能建议最好的环境设置吗?就像我们应该使用 windows 还是 linux 等等......
  • @Arpan 如果您还有任何问题,请联系ask them as such。但是,对于 stackoverflow,您所问的大部分内容听起来都过于主观和基于意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多