如果一个工作集超出MongDB中的内存,会发生什么?

问题描述

我知道每次在mongoDB中运行查询时都会缓存工作集。

当我知道上一页中的数据已被删除并缓存时,如果一个工作集超出了缓存内存,会发生什么?

例如) cacheSizeGB:0.5g, 有关查询的文档总大小:1g

通过使用project命令减小正在缓存的文档的大小是否有帮助?

解决方法

缓存由WiredTiger管理,mongod将请求它需要的文档,如果WT在缓存中找不到它,它将从磁盘读取它。如果这使缓存超过阈值(默认为最大大小的80%),则背景逐出工作人员将开始从缓存中删除最近最少使用的项目。

结果集是在堆内存中而不是在缓存中构造/排序的。如果结果集太大,则mongod可能在排序时将磁盘用于临时空间。

大结果还可能导致操作系统使用交换,在极端情况下,它可能会耗尽内存并被OOM杀手杀死。