我正在尝试弄清楚Mongodb索引何时加载到内存中。假设我有n个集合,每个集合都有m个索引。那么当mongodb启动时,所有的n x m索引都会加载到内存中吗?
根据文档,他们提到,如果索引适合RAM,那么所有索引都会被加载。如果不是,它们中的一些将被交换到辅助存储。但是我找不到他们澄清的地方,如果在mongodb启动时,所有的索引都被加载了吗?
这一点很重要,因为它可以让我们估计出数据库最优运行所需的RAM大小。
PS:我使用的是aws-documentdb,我认为它应该具有类似的索引行为,因为它们在文档中的任何地方都没有接触到这一部分。
发布于 2020-05-05 07:48:15
谢谢你提出这个问题。
对于包括亚马逊DocumentDB在内的大多数数据库,索引页都是基于对数据库运行的查询而分页到内存中的(可以将其视为延迟加载)。在启动时,缓冲区缓存是空的,当您的工作负载对数据库发出查询时,缓冲区缓存将被页填满。当索引大小太大以至于无法放入内存时,数据库必须清除并从磁盘读取以迭代索引,从而能够响应查询。数据页也是如此。理想情况下,您希望实例上有足够的RAM,以便数据页和索引页都可以放入内存中。从磁盘读取会增加额外的延迟。这里要做的最好的事情是运行您的工作负载,直到它达到稳定状态,然后观察BufferCacheHitRatio,看看您的查询是否主要从缓冲区缓存获得服务,或者您是否需要从磁盘进行大量读取。有关详细信息,请参阅:https://docs.aws.amazon.com/documentdb/latest/developerguide/best
https://stackoverflow.com/questions/61585002
复制相似问题