2012-02-20 7 views
9

完了までに時間がかかりすぎるクエリがあります。 私はいくつかのパフォーマンステストをしたいのですが、一度チェックすると(現在は約30秒かかっています)、クエリーがより速く実行されます(< 1秒)。 私はそれがmongodbのキャッシュにあると仮定します。 mongodbのキャッシュを無効にする方法や、パフォーマンスをチェックする別の方法はありますか?キャッシュなしでmongodbのクエリのパフォーマンスを確認する方法

私はmongodbでホストされているmongodbを使用しています。私はそれが長すぎたので、説明の一部を切り捨てなければならなかった

{"cursor"=>"BtreeCursor start_-1", "nscanned"=>5276, "nscannedObjects"=>5276, "n"=>25, "millis"=>3264, "nYields"=>0, "nChunkSkips"=>0, "isMultiKey"=>false, "indexOnly"=>false, "indexBounds"=>{"start"=>[[{"$maxElement"=>1}, {"$minElement"=>1}]]}, "allPlans"=>[{"cursor"=>"BtreeCursor attendees_count_-1", "indexBounds"=>{"attendees_count"=>[[1.7976931348623157e+308, 1]]}}, {"cursor"=>"BtreeCursor images_count_-1", "indexBounds"=>{"images_count"=>[[1.7976931348623157e+308, 2]]}}, {"cursor"=>"BtreeCursor start_-1", "indexBounds"=>{"start"=>[[{"$maxElement"=>1}, {"$minElement"=>1}]]}}, {"cursor"=>"BtreeCursor start_-1_end_-1", "indexBounds"=>{"start"=>[[{"$maxElement"=>1}, {"$minElement"=>1}]], "end"=>[[{"$maxElement"=>1}, {"$minElement"=>1}]]}}, {"cursor"=>"BtreeCursor attendees._id_1 multi", "indexBounds"=>{"attendees._id"=>[[BSON::ObjectId('4f0b621e94bb688563000007'),BSON::ObjectId('4f0b621e94bb688563000007')], [BSON::ObjectId('4f0b647d5a8c00acde05236f'), BSON::ObjectId('4f0b647d5a8c00acde05236f')], [BSON::ObjectId('4f0b647d5a8c00acde052370'), BSON::ObjectId('4f0b647d5a8c00acde052370')], [BSON::ObjectId('4f0b647d5a8c00acde052371'), BSON::ObjectId('4f0b647d5a8c00acde052371')], [BSON::ObjectId('4f0b647d5a8c00acde052372'), BSON::ObjectId('4f0b647d5a8c00acde052372')], [BSON::ObjectId('4f0b647d5a8c00acde052373') ... (lots of Object IDs)]]}}} 

注意:ここでのRuby on Railsの3 とプログラムが説明しています。 "たくさんのオブジェクトID"がある場合、オブジェクトID(〜400)がたくさんありました。

おかげで、すべての

答えて

2

あなたが最初のクエリを実行している、データセットはメモリマップされているが、MongoDBのサイトでCachingを参照してください、実際のメモリにページングされていません。したがって、OSはそのデータセットをメモリにページし、クエリを実行して結果を得る必要があります。

RAM(高速)にディスクからページングしているため(高速)、最初の実行は遅くなります。メモリが不足している場合を除き、そのデータはRAMに残ります。セットは速くなるでしょう。

これは、MongoDBが機能するように設計されているため、データセットをメモリにロードするプロセスは、データベースの「ウォーミングアップ」と呼ばれ、取得したウォームアップ(最初のクエリ)真の業績

最初のクエリではまだ返されるまでに非常に時間がかかるようです。索引を効果的に使用していることを確認する必要があります。その調査を開始するには、explain()ページが最適です。

+0

私はメモリにすべての文書を読み込むことができないので、私はまだ私の最初のクエリを高速に実行します。だから私はすでに説明を使って、それが〜5000文書をスキャンしてクエリをフェッチするのを見ました。そして、私は30秒間が5000文書に対して多すぎると思います。なぜ私はキャッシュなしで同じクエリを実行し続けたいので、何が間違っているかをテストすることはできません。 – Gluz

+0

クエリでインデックスが使用されましたか?質問に説明を追加してみてください。私は出力を見てみることができます。 –

+0

元のメッセージに追加されました。 – Gluz

関連する問題