MongoDBクエリが本当に遅いのはなぜですか?


9

私は仕事で大規模なMongoDBサーバーを継承しており、クエリの実行速度がなぜ遅いのかを解明する任務を負っています。DBには、大量のレコード(10 ^ 9のオーダー)が含まれており、約300 GiBを消費します。最初は生のレコード数が原因かもしれないと思ったので、適切なフィールドにインデックスを設定しました。これは、DBにある条件を検索するクエリに大いに役立ちましたが、一致しないクエリでは80〜90分かかります。これに取り組む方法に関するアイデアはありますか?


1
MongoDBのどのバージョンですか?どんなハードウェア?シャードはいくつありますか?
Rob Olmos

2
ああ、継承された問題の痛み...
gWaldo

回答:


5

特に一致のないクエリは、一致のあるクエリよりもはるかに時間がかかるため、重要なインデックスが不足しているようです。それはどのような種類のクエリですか?多分あなたは複合インデックスが必要ですか?whereクエリの一部として使用していますか?

私はMongoDBの専門家ではありませんが、80〜90分は異常です。MongoDBがArenstarにとってどのように「聞こえる」かはわかりませんが、何十億ものドキュメント(テラバイトのデータ)を処理することが示されています。


4

これは答えには遅すぎるかもしれませんが、言及する価値があると思いました。実際に何が起こっているかを確認するために使用できるmongostatのようなツールがあります。インデックスミスが多すぎる、ページフォールトが多すぎる。読み取りおよび書き込み操作を同時に実行している場合は、ロックの割合も調べる必要があります。300 GBは、mongodbが処理するのに大量ではありません。それ以上のことは簡単にできます。

その他の役立つコマンド:

    db.stats();
    db.currentOp();


-5

MongoDbはwebscaleです。申し訳ありませんでした。

おそらく範囲スキャンに基づいて、一致にはおそらくしばらく時間がかかりますか???

私はそれを分解します。Mongoは、300 GBを処理するDBのように聞こえません。おそらく、大量のデータでどのように動作するかを知るにはまだ十分に成熟していません。

Mongoを使用している理由は何ですか?


残念ながら、私の前の人(去った人)は快適に使用でき、実装していました。明るい面として、新しいDBの提案が可能です。
Mark LeMoine、2010年

どのデータを保存していますか?データ構造に関するすべて
Arenstar

これは小さなログファイルレコードで、各レコードにはID(int)、サーバー名(string)、メッセージペイロード(string)、日付、およびIPアドレスが含まれています。現在、IDとサーバー名にインデックスがあります。
Mark LeMoine、2010年

8
mongodbを使用している企業はたくさんあります。300gで十分です。大量のデータを持っているfoursquare、wordnik、boxediceのスタッフにお尋ねください。どちらかといえば、インデックスは正しくありません。あなたがDBを引き抜いてそれを他のものと交換する前に、それらをチェックします。
ラッキータクシー2010年

1
@Arenstar:webscaleの意味?そして、それは他のどのスケールとどう違うのですか?
ジョシュアパルトギ2010年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.