我使用MongoDB进行大规模电子商务操作,产品数百万。我们将类别和一些产品数据缓存在mongo中以便快速访问。
我们仍在开发中,但我们有一个行为,我们想调查。我们的服务器一夜之间闲置。当我们离开的时候,一切都很快,缓存工作非常顺利。当我们在服务器空闲一夜之后早上进来时,它非常慢。但过了一段时间,它加速了agin。
看着内存我看到mongoDB在这段时间内突然上升(正如我所料),因为它变得更加活跃。我有点假设Mongo在空闲时将数据移动到磁盘,并在第二天早上访问时返回内存。
如果是这种情况,那么这个问题将会在生产中消失,而这些页面的访问频率会很高。
有没有人(那里有任何mongo guru)对我的假设有所了解?我正在调查其他原因(数据库访问,CF inits等),但这似乎对我很有用。
答案 0 :(得分:2)
Mongo将内存管理转发给操作系统(内存映射文件机制)。所以,是的,如果一段时间内没有访问某些内存区域,系统会刷新对磁盘的更改(如果有的话)并释放它。
是的,当生产活动一直存在时,这不应该发生。
答案 1 :(得分:2)
众所周知,MongoDB使用内存映射文件,并且内存处理完全直到底层操作系统。因此,您的操作系统很可能会从内存中删除“不那么热门”的页面。