私は仕事で大規模なMongoDBサーバーを継承しており、そのサーバーに対して実行されるクエリが非常に遅い理由を解明する任務を負っています。 DBには、大量のレコード(10 ^ 9のオーダー)が含まれ、約300 GiBを消費します。最初は生のレコード数が原因かもしれないと思ったので、適切なフィールドにインデックスを設定しました。これは、DB内にある基準を検索していたクエリに大いに役立ちましたが、一致しないクエリでは80〜90分かかります。これに取り組む方法に関するアイデアはありますか?
特に一致のないクエリの方が一致のあるクエリよりはるかに時間がかかるため、重要なインデックスが不足しているようです。それはどのような種類のクエリですか?多分あなたは複合インデックスが必要ですか? where
をクエリの一部として使用していますか?
私はMongoDBの専門家ではありませんが、80〜90分は異常です。 MongoDBがArenstarにとってどのように「聞こえる」かはわかりませんが、それは 10億のドキュメント(テラバイトのデータ) を処理することが示されています。
これは答えには遅すぎるかもしれませんが、言及する価値があると思いました。実際に何が起こっているかを確認するために使用できるmongostatのようなツールがあります。インデックスミスが多すぎる、ページフォールトが多すぎる。読み取りおよび書き込み操作を同時に実行している場合は、ロックの割合も調べる必要があります。 300 GBは、mongodbが処理するのに大量ではありません。それ以上のことは簡単にできます。
その他の役立つコマンド:
db.stats();
db.currentOp();
MongoDBデータベースプロファイラーページ 、特に クエリパフォーマンスの最適化 のセクションをご覧ください。