首页 技术数据库正文

Mongodb 排序导致内存不足

薄洪涛 数据库 2021-11-26 411 0

报错信息:


MongoDB.Driver.MongoQueryException: QueryFailure flag was Executor error: OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit

报错页面很明显告知了问题排查的方向: - Sort operation 该页面涉及的MongoDB查询语句使用了排序。

  • more than the maximum 33554432 排序操作超过了MongoDB单个Session排序可使用的最大内存限制。

检索MongoDB的日志确实存在大量的查询报错,跟APP页面报错能够对应上;并且日志中排序使用的字段为add_time_id,升序排序

有两种解决方法

方法1:

增加内存

mongo 的 sort 操作是在内存中操作的,必然会占据内存,同时mongo内的一个机制限制排序时最大内存为 32M,当排序的数据量超过 32M,就会报上面的这个错,解决办法就像上面提示的意思,一是加大 mongo的排序内存,这个一般是运维来管,也有弊端,就是数据量如果再大,还要往上加


方法2:

增加索引

-1 倒序 1正序
db.getCollection('p_match_result').createIndex({"add_time": -1})

db.getCollection('p_match_result').getIndexes()

搞定

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论