linux - 强制 MongoDB 预取内存

标签 linux mongodb memory-management centos memory-mapped-files

我目前在 CentOS Linux 版本 7.0.1406(核心)上运行 MongoDB 2.6.7。 服务器启动后不久,以及(有时)一段时间不活动(至少几分钟)后,所有查询都比平时花费更长的时间。一段时间后,它们的速度会增加并稳定在更短的持续时间内(对于特定(更复杂的)查询,差异是从最初的 30 秒到“预热”期后的大约 7 秒)。

在使用 top 和各种网络流量监控工具监控我的 VM 之后,我注意到瓶颈是由于硬页面错误(从一开始就是我的预感)造成的。

鉴于我的数据占用 <2Gb,并且我的机器有 3.5GB 可用空间,我的集合应该都适合内存(即使有它们的索引)。它们最终确实会被获取,但只是按需获取,这最终会对用户体验产生相对负面的影响。

MongoDB uses memory-mapped files to operate on collections .有什么方法可以强制操作系统在 MongoDB 启动后立即将整个文件预取到内存中,而不是等待查询触发随机页面错误?

最佳答案

来自 mongodb 文档:

touch命令将数据从数据存储层加载到内存中。 touch 可以加载数据(即文档)索引或同时加载文档和索引。使用此命令可确保集合和/或其索引在另一个操作之前位于内存中。通过将集合或索引加载到内存中,理想情况下 mongod 将能够更有效地执行后续操作。

关于linux - 强制 MongoDB 预取内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28611924/

相关文章:

mysql - 如何根据此 ID 恢复文件? MySQL数据恢复

javascript - 如何防止 Mongoose 使用 ObjectID 插入而不是嵌入它

c# - C#中的每线程内存管理

memory-management - Fortran 数组内存管理

linux - 如何以编程方式增加 LInux 上 UDP 套接字的每个套接字缓冲区?

安卓文件系统

php - exec() 什么都不做

node.js - 通过 id 查找 mongoose 数组中的对象

javascript - 如何使用 Meteor 在 Mongo 中插入 N 个元素到文档中

c - 如何重用 C 中的字符串而不让旧值出现在内存中?