溢出排序阶段缓冲的数据使用量超出内部限制

使用代码:


all_reviews = db_handle.find().sort('reviewDate', pymongo.ASCENDING)

print all_reviews.count()


print all_reviews[0]

print all_reviews[2000000]

计数打印2043484,然后打印all_reviews[0]。


但是,在打印时all_reviews[2000000],出现错误:


pymongo.errors.OperationFailure:数据库错误:运行程序错误:溢出排序阶段缓冲数据使用量33554495字节超过了内部限制33554432字节


我该如何处理?


绝地无双
浏览 878回答 3
3回答

至尊宝的传说

我想补充一点。您可以在admin数据库上使用以下命令查看当前缓冲区的使用情况:> use adminswitched to db admin> db.runCommand( { getParameter : 1, "internalQueryExecMaxBlockingSortBytes" : 1 } ){ "internalQueryExecMaxBlockingSortBytes" : 33554432, "ok" : 1 }它的默认值为32 MB(33554432字节)。在这种情况下,您的缓冲区数据不足,因此您可以使用自己定义的最佳值来增加缓冲区限制,例如50 MB,如下所示:>  db.adminCommand({setParameter: 1, internalQueryExecMaxBlockingSortBytes:50151432}){ "was" : 33554432, "ok" : 1 }我们还可以通过mongodb配置文件中的以下参数永久设置此限制:setParameter=internalQueryExecMaxBlockingSortBytes=309715200希望这可以帮助 !!!Note:此命令仅在3.0 +版本之后才支持

慕村225694

就我而言,有必要在代码中修复必要的索引并重新创建它们:rake db:mongoid:create_indexes RAILS_ENV=production因为当需要字段索引时不会发生内存溢出。PS在此之前,我必须禁用创建长索引时的错误:# mongoMongoDB shell version: 2.6.12connecting to: test> db.getSiblingDB('admin').runCommand( { setParameter: 1, failIndexKeyTooLong: false } )也可能需要reIndex:# mongoMongoDB shell version: 2.6.12connecting to: test> use your_dbswitched to db your_db> db.getCollectionNames().forEach( function(collection){ db[collection].reIndex() } )
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MongoDB