2013-10-09 31 views
3

我的工作集(db.collection.totalSize())是21 GB。我的索引占用了3.5 GB指数适合RAM,但仍寻呼

在一个16 GB RAM机,通过mongostat我观察发生故障该页面。请注意,它们即使在使用索引的查询中也会发生。

使用vmstat,我可以看到重下的IO/BI部分读取。

最后,在“admin”数据库上使用db.serverStatus(),我看到居民 mem是10.6 GB。

鉴于蒙戈使用10.6 GB,这显然是比我更加指数,为什么会发生分页?

回答

3

指数不应有去磁盘拯救你。

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

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

蒙戈DB调用最commenly请求数据的“工作组”

请参阅本FAQ获取更多信息。

编辑:有关的更多信息DB的缓存将少用满。

缓存只能包含数据的X量。缓存中的数据将从缓存中返回(不含磁盘IO)。如果您的程序定期请求不在缓存中的数据,那么数据库将不得不求助于磁盘IO来获取数据。缓存(这里是数据库)试图使用一些算法来决定在缓存中存储什么。 “不同”是指与缓存认为应该存储的内容不同的数据。

,我建议你在一般的缓存更多信息阅读起来。

+0

因此,搜索索引适合RAM,但获取整个文件s需要io和RAM(这不是因此使用分页? –

+0

@Kevin:增加了几行来澄清 –

+0

谢谢SH。清晰,信息性的答案和根据你的更新和链接,它可能是索引适合内存,但操作系统可能会把文档放在RAM中,由于我的内存不包括工作集,因为文档可能会替换索引RAM,然后需要页面错误,如果需要将索引放在内存中 –