QA@IT

mongoDBで遅いクエリを発見したい

5485 PV

手元のプロジェクトでふとruby -rprofileしてみたところ、mongoの中で処理時間の8割が消費されていることが明らかになりました…

MySQLであればexplainしてみるなどの方法でどこが遅くなっているか分かると思うのですが、mongoDBの場合はどのようにして遅いクエリを発見すればよいのでしょうか。

  • 手元に、ちゃんとしたMongo環境がなくなっているのでノートで。Mongoサーバのログにスロークエリが記録されていたと思います(ファイル名など忘れた)。

    それをコンソールから http://www.mongodb.org/display/DOCS/Explain すれば確認できるかと思います。
    -

回答

  1. --slowmsオプションを付けて起動
    • ログにスロークエリを出力
  2. db.setProfilingLevel(1,20)
    • スロークエリをロギング。出力先はsystem.profileというcollection。
  3. db.currentOp()
    • 実行中のクエリを確認
  4. db.coll.find().explain()
    • 実行計画を確認

辺りを組み合わせてでしょうか。

他、公式ページに詳しく載っています。Monitoring and Diagnostics - MongoDB

こちらの資料も参考になります。20110514 mongo dbチューニング

編集 履歴 (1)
  • とてもまとまっていて分かりやすいです。まさに必要な情報だったので助かりました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。