索引适合RAM,但仍在寻呼

时间:2013-10-09 22:16:58

标签: mongodb

我的工作集(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,这显然超过了我的索引,为什么会出现分页?

1 个答案:

答案 0 :(得分:3)

索引不应该让您不必去磁盘。

数据库正在使用16 GB中的10.6。这最多只占总数据库大小的一半。如果您的应用程序正在请求不同的信息,那么数据库缓存的使用率就会降低。 (虽然索引可能会缓存在内存中,但索引只是整个记录的一小部分)

索引将帮助您找到正确的位置,但您可能需要转到磁盘才能获得它。 MongoDB和大多数其他数据库会在内存中缓存最新/经常使用的结果。

Mongo DB将最常用的请求数据调用到"工作集"

有关详细信息,请参阅此FAQ

编辑:有关数据库缓存的更多信息将减少使用量。

缓存只能包含X个数据量。缓存中的数据将从缓存中返回(没有磁盘IO)。如果您的程序经常请求不在缓存中的数据,则数据库将不得不求助于磁盘IO来获取数据。缓存(此处为DB)尝试使用某种算法来确定要在缓存中存储的内容。不同的'指的是与缓存认为应该存储的数据不同的数据。

我建议你阅读一般的缓存以获取更多信息。