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()
- 実行計画を確認
- mongodで起動パラメータ追加(ログにスロークエリを出力)
以下、設定環境: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)
https://www.mysoftkey.com/mongodb/profiling-for-slow-query-log-in-mongodb/