mongodb 2.4.1失败并且处理内存不足'

时间:2013-04-17 06:55:42

标签: mongodb aggregation-framework

我有以下mongo版本

db version v2.4.1    
MongoDB shell version: 2.4.1,    

db version v2.2.1-rc1, pdfile version 4.5, 
MongoDB shell version: 2.2.1-rc1

安装在64-bit windows 7计算机上。

我有一个包含10001000(1000万+)记录的集合,当我使用V 2.4.1进行聚合时,它会失败并显示以下内容 错误:

Fatal error in CALL_AND_RETRY_2
Allocation failed - process out of memory

然而,当我使用V 2.2.1-rc1时,为了聚合相同的集合,它工作正常并在大约1分钟内得到结果。

正在汇总的集合的示例文档:

{

    "_id" : ObjectId("516bdd1c39b10c722792e007"),
    "f1" : 10000010,
    "f2" : 10000000,
    "key" : 0
}

聚合命令:

{$group: {"_id": "$key", total: {$sum: "$f1"}}}

用于填充记录的命令:

for(var i = 10011000; i < 10041000; ++i)
{ 
    db.testp.insert({"f1": i+10, "f2": i, "key": i%1000})
}

1 个答案:

答案 0 :(得分:4)

你有多少记忆?可能是$group占用了超过10%的可用内存并导致错误吗?请参阅memory for cumulative operators上的汇总文档。

编辑1:

出于兴趣 - 聚合是否在shell外部工作?例如从司机那里打电话。 我已经看到类似的v8错误,并且在2.4 Theres中将shell更新为v8有可能是它。

编辑2:

如果结果数组在shell中太大,那么也会触发错误:请参阅SERVER-8859。要解决此问题,您可能需要运行多个聚合,方法是尽早执行$match限制工作集,甚至通过结果集执行$skip$limit分页。

我在Mac上尝试使用2.4.1上的10,070,999个文档聚合并没有得到错误