バッファリングされたデータの制限を増やす方法


16

Ubuntu内で100万件のレコードを含むMongoDB Dbコレクションを作成しましたが、それに対してソートコマンドを実行しようとすると、次のエラーが表示されます。

 "$err" : "Runner error: Overflow sort stage buffered data usage of 33555002 bytes exceeds internal limit of 33554432 bytes",
 "code" : 17144

誰でも内部制限を増やして、このコマンドやその他の大規模なコマンドをデータに対して実行できるようにする方法を説明できますか?


できるとは思わない。問題はおそらくあなたの声明にあります:EXPLAINはINDEXを使用していることを示していますか?そうでない場合は、インデックスをテーブルに追加する必要があります。
リンツウィンド14

こんにちは、Rinzwind。パフォーマンスを比較しようとしているので、noindex、プライマリインデックス、セカンダリインデックスを使用してデータの並べ替えを実行しようとしています。インデックスなしでこのスケールのようなものを実行することは不可能であることを提案していますか?
Jon295087 14

あ。まあ、EXPLAINを使用してパフォーマンスを調べる傾向があります(EXPLAINでレコード数が少なくなるとすぐにパフォーマンスが低下します)。このようにする場合は、おそらくレコードを制限する必要があります。
リンツウィンド14

MongoDBがこのデータセット内の約25000のドキュメントを処理することがわかりましたが、それ以上のものはありません...データベースの制限に過ぎないのでしょうか?コメントしてくださってありがとうございます。
Jon295087 14

回答:


23

これは、SERVER-13611(最新バージョンを使用していることを確認してください)のようなバグ、または2.6のスパースインデックスでソートしようとしているために発生する可能性がありますが、通常は単にソートしようとしているためですインデックスのないメモリ内の多くのレコード。

ヒットする特定の制限は意図的なものであり、ここに文書化されています -変更できないため、結果セットを減らすか、インデックスなどを使用してソートを実行する必要があります。

アップデート(2014年11月):次のように今、この設定を微調整できるようにするん今後の2.8リリース(これを書いているとして、2.8.0-RC0):

db.adminCommand({setParameter: 1, internalQueryExecMaxBlockingSortBytes: <limit in bytes>})

デフォルト値は32MiB(33554432バイト)であり、注意して調整する必要があります-大量のメモリ内ソートにより、データベースが停止する可能性があります(これが最初に制限があった理由です)。


「ERRMSG」:「オプションを参照するには、真のオプションがセットに、使用のヘルプ見つからない」
モハマド・Efazati

1
おそらくあなたは、これはかなりの時間前に書かれた、この答えは、のために意図されていたよりもはるかに異なるバージョンを使用している
アダム・C

2

200K +のレコードをソートしてページ付けするときにも問題に遭遇しました。最も簡単な解決策は、インデックスを追加することです(ソートしている属性に対して)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.