3

我的工作集 ( db.collection.totalSize()) 是21 GB。我的索引占用3.5 GB

16 GB RAM 机器上,通过mongostat我观察到页面错误发生。请注意,即使使用索引的查询也会发生它们。

使用vmstat,我可以在 IO/bi 部分看到大量读取。

最后,db.serverStatus()在“admin”数据库上使用,我看到常驻内存是10.6GB。

鉴于 Mongo 使用 10.6 GB,这显然超过了我的索引,为什么会发生分页?

4

1 回答 1

3

索引不应使您不必去磁盘。

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

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

Mongo DB 将最常请求的数据称为“工作集”

有关更多信息,请参阅此常见问题解答。

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

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

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

于 2013-10-09T22:39:43.670 回答