我的工作集(db.collection.totalSize()
) 21 GB 。我的索引占用 3.5 GB 。
在 16 GB RAM计算机上,通过mongostat
我观察到发生了页面错误。请注意,即使使用索引的查询也会出现这种情况。
使用vmstat
,我可以看到IO / bi部分下的重读。
最后,在“admin”数据库中使用db.serverStatus()
,我发现常驻内存为10.6
GB。
鉴于Mongo使用的是10.6 GB,这显然超过了我的索引,为什么会出现分页?
答案 0 :(得分:3)
索引不应该让您不必去磁盘。
数据库正在使用16 GB中的10.6。这最多只占总数据库大小的一半。如果您的应用程序正在请求不同的信息,那么数据库缓存的使用率就会降低。 (虽然索引可能会缓存在内存中,但索引只是整个记录的一小部分)
索引将帮助您找到正确的位置,但您可能需要转到磁盘才能获得它。 MongoDB和大多数其他数据库会在内存中缓存最新/经常使用的结果。
Mongo DB将最常用的请求数据调用到"工作集"
有关详细信息,请参阅此FAQ。
编辑:有关数据库缓存的更多信息将减少使用量。
缓存只能包含X个数据量。缓存中的数据将从缓存中返回(没有磁盘IO)。如果您的程序经常请求不在缓存中的数据,则数据库将不得不求助于磁盘IO来获取数据。缓存(此处为DB)尝试使用某种算法来确定要在缓存中存储的内容。不同的'指的是与缓存认为应该存储的数据不同的数据。
我建议你阅读一般的缓存以获取更多信息。