avatar

目录
mongo 没有加索引导致排序异常

今天有个需求是在 mongo 的报表 A 中查询数据,然后按照字段 a 排序返回数值。在数据量几百几千的时候还是很 ok 的。

但当数据量上升到十万左右的时候,执行时开始报错

sql
1
com.mongodb.MongoQueryException: 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 

原因比较明确,Sort operation used more than the maximum 33554432 bytes of RAM, 33554432 bytes正好回事 32MB。
mongo 的sort 操作是把数据拿到内存中在进行排序的,为了节省内存,默认给sort操作限制了最大内存为32MB,所以当数据量越来越大,超过 32MB
的时候,就抛出异常了。

那对应的解决方案(但是这个方案,并不推荐使用),就是修改默认配置,多分配一点内存呗。在命令行执行:

sql
1
db.adminCommand({setParameter:1, internalQueryExecMaxBlockingSortBytes:335544320}) //不推荐使用

来说一下正经推荐的方法 —— 建索引

文章作者: Viola Tangxl
文章链接: https://violatangxl.github.io/2022/07/19/mongo-sort-index/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 椰子是只猫
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论