3

次の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マシンにインストールされています。

(1000 万以上) のレコードを持つコレクションがあり、10001000V 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})
}
4

1 に答える 1

4

どのくらいのメモリを持っていますか? $group使用可能なメモリの 10% 以上を占有しており、エラーが発生している可能性がありますか? 累積演算子のメモリに関する集計ドキュメントを参照してください。

編集1:

興味深いことに、集計はシェルの外で機能しますか? たとえば、ドライバーから呼び出します。同様の v8 エラーを見たことがあります。シェルが 2.4 で v8 に更新されたため、その可能性があります。

編集2:

結果の配列がシェルで大きすぎる場合、それもエラーを引き起こす可能性があります: SERVER-8859を参照してください。回避するには、複数の集計を実行する必要がある場合があります。$match早期に を実行してワーキング セットを制限するか、結果セットをページ分割することも$skipでき$limitます。

Mac の 2.4.1 で 10,070,999 個のドキュメントを使用して集計を試みましたが、エラーは発生しませんでした

于 2013-04-25T09:44:25.493 に答える