3

我试图弄清楚 Mongodb 索引何时加载到内存中。假设我有 n 个集合,每个集合都有 m 个索引。那么mongodb启动时,所有nxm索引都会加载到内存中吗?

根据文档,他们提到如果索引适合 RAM,则所有索引都会被加载。如果没有,它们中的一些被交换到辅助存储。但我找不到他们澄清的地方,如果在 mongodb 启动时,是否加载了所有索引?

这很重要,因为它可以让我们估计数据库以最佳方式运行所需的 RAM。

PS:我正在使用 aws-documentdb,我认为索引应该具有类似的行为,因为它们也没有在任何地方的文档中触及这部分。

4

1 回答 1

3

谢谢你问这个问题。

对于大多数数据库,包括 Amazon DocumentDB,索引页面会根据针对数据库运行的查询分页到内存中(将其视为延迟加载)。在启动时,缓冲区缓存是空的,并且会在您的工作负载对数据库发出查询时填满页面。当索引太大以至于无法放入内存时,数据库必须清除并从磁盘读取以遍历索引以响应查询。数据页也是如此。理想情况下,您希望实例上有足够的 RAM,以便数据页和索引页都适合内存。从磁盘读取会增加额外的延迟。最好的办法是运行您的工作负载,直到它达到稳定状态,然后观察 BufferCacheHitRatio 以查看您的查询是否主要来自缓冲区缓存,或者您是否' 重新需要从磁盘读取很多。有关更多信息,请参阅:https://docs.aws.amazon.com/documentdb/latest/developerguide/best_practices.html

于 2020-05-04T23:48:15.490 回答