2013-05-03 44 views
4

我目前使用MongoDB来存储单个数据集合。这些数据大小为50 GB,大约有95 GB的索引。我正在运行一台256 GB RAM的机器。因为机器专门分配给mongo,所以我基本上希望将所有索引和工作集都放在RAM中。MongoDB - 强制保留索引+工作集在RAM

目前我看到,尽管mongo运行的集合大小为50 GB +索引大小为95 GB,但机器中使用的总RAM却小于20 GB。

有没有办法强制mongo利用可用的RAM,以便它可以将所有索引和工作集存储在内存中?

回答

5

当你的mongod进程启动时,它没有驻留内存中的数据。数据在被访问时被分页。鉴于你的集合适合在内存中(这是这里的情况),你可以在其上运行touch command。在Linux上,这将调用readahead系统调用来将数据和索引提取到文件系统缓存中,使它们在内存中可用于mongod。在Windows上,mongod会读取每个页面的第一个字节,并将其拉入内存。

如果您的集合+索引不适合内存,则只有在触摸过程中访问的数据的末尾可用。

+2

你打败了我 - 这是正确的想法。这通常被称为[缓存预热或缓存重新加热](http://blog.mongodb.org/post/10407828262/cache-reheating-not-to-be-ignored),并且是MongoDB管理中的一个重要工具。 – 2013-05-03 19:24:44

+0

不幸的是,WiredTiger存储引擎不支持touch命令......你知道一个替代方案吗?谢谢 – 2016-05-19 19:26:33