会变慢吗?是否只能找到适合RAM的数据? 如果mongodb索引比RAM更多,会发生什么?
答案 0 :(得分:14)
关于Mongo
MongoDB使用内存映射文件。
这意味着操作系统实际上控制了内存中的内容(进出磁盘)。
规则
如果索引+工作集超过内存,则最近使用的最后页面(内存部分)将刷新到磁盘。这样只留下最近使用的数据,这些数据仍然可以在内存中随时可用。
您的操作系统会对此进行控制。
如果您的真实工作集和索引不适合内存,您将体验到糟糕的性能,实际上,一个工作集(热数据)的大小远小于其总数据集。
如果您没有违反此规则,即使您的索引+总数据可能超过总可用内存,您也应该在大多数情况下都有出色的表现。
如何运作
如果执行的查询需要不在内存中的数据,它将被分页到内存中(从磁盘中检索)并且会有性能损失。
注意:这基本上是数据库首次启动时的情况(冷)。
内存中没有任何东西可以开始,需要数据时会发生页面错误,并且根据需要将数据分页到内存中。当内存不足时,最近最近使用的页面(块)将从内存中刷新,以支持更热(最近访问)的数据。
另外值得一提的是,由于索引不断使用,因此最近一直使用,因此它们几乎不会被分页。
答案 1 :(得分:6)
如果索引大于可用内存,则性能会快速下降 。 MongoDB网站特别建议您“确保您的索引适合RAM”。
如果您的查询看起来很迟钝,您应该验证您的索引是否正常 小到足以适应RAM。例如,如果你在4GB RAM上运行 你有3GB的索引,那么你的索引可能不合适 在RAM中。您可能需要添加RAM和/或验证所有索引 你创造的实际上正在被使用。