线上服务的MongoDB中有一个很大的表数据有十几万条。然后报了下面这个错误:
“exception”:”org.springframework.data.mongodb.UncategorizedMongoDbException”,
“message”:”Query failed with error code 96 and error message ‘Executor error during find command: OperationFailed: Sort operation used more than the maximum 33554432 bytes of RAM. Add an index, or specify a smaller limit.’ on server
原因,排序问题,后端代码中查询肯定使用了排序。
这是个非常常见的MongoDB报错了。因为MongoDB处理排序时,如果排序的字段没有建立索引,会把全表都丢到内存中处理。
而内存的大小并不是无限使用的,MongoDB的默认设置是32MB。一旦数据量超过32MB,则会报错。
解决方案1:修改大小
参数internalQueryExecMaxBlockingSortBytes
32MB这个限制是在参数internalQueryExecMaxBlockingSortBytes中控制。你可以在MongoDB的客户端上直接查看这个参数的值,执行以下语句:
db.runCommand({
getParameter: 1,
"internalQueryExecMaxBlockingSortByte