:>/dev/null

ラガードエンジニアの不撓不屈の精神

mongodbでのslowlog設定

Mongodb に関してslowlog出力設定での調査・対応を下記へ記載しておく。
mongosに設定追加は「profile currently not supported via mongos」とエラーとなる為、shard(mongod)に設定をする。
mongodへ設定追加後、mongosで解析行う。

  • 以下対応フロー
    • mongodで起動パラメータ追加(ログにスロークエリを出力)
      • /etc/init.d/mongodへパラメータ設定
    • 設定ファイルの出力確認
    • 必要に応じて閾値調整
    • db.currentOp()
      • 実行中のクエリを確認
    • db.coll.find().explain()
      • 実行計画を確認

以下、設定環境:mongo version2.4

・起動時パラメータ追加方法

#vi /etc/init.d/mongod

//--profile
//プロファイルのレベル
//1: 閾値以上の時間のかかったクエリを残す
//2: 全てのクエリを残す
//
//--slowms
//閾値(ms)

#OPTIONS=" -f $CONFIGFILE"
OPTIONS=" -f $CONFIGFILE --profile=1 --slowms=100"

・出力サンプルイメージ

Thu Aug  9 14:10:09.069 [conn40] query testsite_mongo.offerwall_click_data query: { $query: { $and: [ { app_id_to: 100 }, { user_id: "10999999" } ] }, $orderby: { create_date: -1 } } planSummary: IXSCAN { create_date: 1.0 } ntoreturn:2 ntoskip:0 nscanned:128538 nscannedObjects:128538 keyUpdates:0 numYields:0 locks(micros) r:113561 nreturned:0 reslen:20 113ms

上記での嵌ったポイントとして設定ファイルへの出力方法がある。
mongo shellから実行する場合、オンライン(db.setProfilingLevel(1,20))にてON/OFF可能であるがファイル出力方法に時間を要した。
※出力先はsystem.profileというcollectionに収集され、ログ出力されない
起動時のパラメータを上記設定追加する事で正常稼働した。

ref)

MongoDBで実行したクエリをログに出力する

hiyokur.hatenablog.com

stackoverflow.com

https://www.mysoftkey.com/mongodb/profiling-for-slow-query-log-in-mongodb/