2013-05-03 16 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