mongodb Sort排序能够支持的最大内存限制为32M Plan executor error during find: FAILURE

Posted chenjianwen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb Sort排序能够支持的最大内存限制为32M Plan executor error during find: FAILURE相关的知识,希望对你有一定的参考价值。

1.一个比较老的游戏服维护,关服维护后启动时报错

 

 2.看到关于mongodb的报错,于是去查一下mongodb的日志

 

 Plan executor error during find: FAILURE, stats

3.关于此报错

MongoDB Server中确认了对于Sort排序能够支持的最大内存限制为32M

在排序字段未利用到索引的情况下,若超过32M内存则会被Abort,语句直接返回报错。

4.结论

排序内存限制的问题
MongoDB使用内存进行排序的场景只有是Sort stage,官方文档有说明:

If MongoDB can use an index scan to obtain the requested sort order, the result will not include a SORT stage. Otherwise, if MongoDB cannot use the index to sort, the explain result will include a SORT stage.

意思大概是如果MongoDB可以使用索引扫描来进行排序,那么结果将不包括SORT stage。否则如果MongoDB无法使用索引进行排序,那么查询计划将包括SORT stage。

使用索引扫描的效率是远大于直接将结果集放在内存排序的,所以MongoDB为了使查询语句更有效率的执行,限制了 排序内存的使用,因而规定了只能使用 32M,该种考虑是非常合理的。

但也可通过手工调整参数进行修改(不建议):

# 比如调大到 128M
## 在线调整
> db.adminCommand({setParameter:1, internalQueryExecMaxBlockingSortBytes:134217728})

## 持久到配置文件
setParameter:
internalQueryExecMaxBlockingSortBytes: 134217728

 

以上是关于mongodb Sort排序能够支持的最大内存限制为32M Plan executor error during find: FAILURE的主要内容,如果未能解决你的问题,请参考以下文章

配置mongoDB限制使用最大内存

《MongoDB入门教程》第12篇 查询结果排序

《MongoDB入门教程》第12篇 查询结果排序

《MongoDB入门教程》第12篇 查询结果排序

MongoDB索引管理

是否有任何有效的方法可以以最新的一阶对给定的 mongodb 数据进行分页并避免排序超出大数据的内存限制?