繁体   English   中英

关于将加载的索引保留在ram中的mongodb行为是什么?

What is mongodb behavior regarding keeping loaded indexes in ram?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

假设我在mongodb中只有一个索引,并且只有一个索引,并且我需要使用该mongo集合的应用程序整个生命周期的索引。 我想知道mongodb的行为。 在这种情况下,一旦索引加载到内存中,mongodb会将其保留在ram中吗?

谢谢

2 个回复

MongoDB淘汰出RAM的第一件事将是LRU( 最近最少使用 )的数据。 因此,如果您只有一个索引,则很有可能会继续定期使用它,并将其保留在内存中。

资源

不幸的是,您当前无法将集合或索引固定在内存中。 MongoDB使用内存映射文件将集合和索引加载到内存中。 当您的活动通过查询,更新,插入和删除触及数据库的各个部分时,该数据将被加载到内存中。 这称为工作集。 如果加载工作集所需的总内存少于可用内存,则没有问题。

如果没有,MongoDB将使用LRU算法来选择要从内存中卸载的内容。 这就是为什么理解工作集的概念以及它与可用内存的关系如此重要的原因。

文档中的这篇文章应该会有所帮助:

如何计算应用程序需要多少RAM?

您需要的RAM数量取决于几个因素,包括但不限于:

  • 数据库存储与工作集之间的关系。
  • LRU(最近最少使用)的操作系统缓存策略
  • 日记的影响
  • 页面错误的数量或速率以及其他MMS量规,以检测何时需要更多RAM

每个数据库连接线程最多需要1 MB的RAM。 从磁盘将数据加载到内存时,MongoDB遵从操作系统。 它只是简单地映射所有数据文件的内存,并依靠操作系统来缓存数据。 当内存不足时,操作系统通常会从RAM中清除最近最少使用的数据。 例如,如果客户端访问索引的频率比文档访问频率高,那么索引很可能会保留在RAM中,但这取决于您的特定用法。

要计算所需的RAM数量,必须计算工作集大小或客户端最常使用的数据部分。 这取决于您的访问模式,拥有的索引以及文档的大小。 由于MongoDB每个连接模型使用一个线程,因此每个数据库连接也将需要多达1MB的RAM,无论是活动的还是空闲的。

如果很少出现页面错误,则您的工作集适合RAM。 如果故障率上升到更高水平,则可能会降低性能。 与旋转磁盘相比,SSD驱动器的重要性不那么重要。

http://docs.mongodb.org/manual/faq/diagnostics/

您可以使用serverStatus命令来获取当前工作集的估计值:

db.runCommand( { serverStatus: 1, workingSet: 1 } )
2 mongodb 索引什么时候加载到内存中?

我想弄清楚 Mongodb 索引何时加载到内存中。 假设我有 n 个集合,每个集合都有 m 个索引。 那么mongodb启动的时候,nxm索引会全部加载到内存中吗? 根据文档,他们提到如果索引适合 RAM,则会加载所有索引。 如果没有,其中一些将交换到辅助存储。 但是我找不到他们澄清的地方,如果在 ...

3 Mongodb:在RAM中保持频繁写入的集合

我正在从流API收集数据,并且想创建一个实时分析仪表板。 该仪表板将显示一个简单的时间序列,标绘每小时的文档数量。 我想知道我目前的方法是否最佳。 在以下示例中,为流中的每个新文档触发on_data。 以上作品。 我得到一个漂亮的图形,该图形绘制了每小时的文档数量。 我的问 ...

2013-09-17 19:54:09 1 675   mongodb
4 MongoDB - 强制将索引+工作集保存在RAM中

我目前正在使用MongoDB来存储单个数据集合。 此数据大小为50 GB,并且具有大约95 GB的索引。 我正在运行一台256 GB RAM的机器。 我基本上希望将所有索引和工作集都放在RAM中,因为该机器专门分配给mongo。 目前我看到,虽然mongo运行的集合大小为50 GB ...

2013-05-03 17:43:00 1 1143   mongodb
5 有关MongoDB中主要索引的良好做法

我有一个包含2个主要集合的MongoDB数据库。 数据库既存储不时到达的原始数据,又存储Web应用程序使用的已处理数据。 RAW :在这里我存储的原始数据永远不可修改。 只有当新的原始数据到达时,才可以插入新的文档。 出于示例的原因,我们可以假定此集合中的每个文档都对应一个产品。 ...

6 删除收集后,有没有办法释放mongodb索引占用的RAM?

问题是我们有一个庞大的数据集,包含5000万条记录并且几乎所有字段都被索引,这会导致RAM的巨大消耗,并且在集合删除后资源没有释放,我知道这可以通过重新启动服务器来解决,但是这个解决方案不适用于我们的情况。 所以,我的问题 - 有没有办法在不重新启动 mongo 服务器的情况下释放 RAM 资源? ...

7 sqlite3中的索引和RAM

我需要写〜147m行。 如果我在没有索引的情况下配置数据库,则一切正常: 但是,如果我添加索引,sqlite会占用我所有的RAM: 我该怎么办? ...

2017-05-07 19:25:16 1 205   sqlite
9 关于核心/的RAM消耗

我正在使用31台可用的Go Go RAM,12核Linux KUbuntu计算机。 我进行了模拟,计算了4个维度(x,y,z,t)上的函数。 我将尺寸定义为numpy.meshgrid使用的数组。 因此,对于每个时间点,我都会为每个点x,y,z计算结果。 它是带有大量数据的繁重计算。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM