MongoDBには、システムで長時間実行される操作を管理するためのツールが多数用意されています。場合によっては、サーバーのパフォーマンスを低下させる不正なクエリやインデックスビルドが発生する可能性があるため、本番サーバーで実行されている操作をいつでも追跡することが非常に重要です。
この情報を提供するMongoDBコマンドは「db.currentOp()」です。詳細については、db.currentOp()のMongoDBドキュメントを参照してください。このコマンドは、db、操作、実行時間などによって出力を制限するパラメーターを取ります。
出力例は次のとおりです。
{ opid: 294, active: false, op: "query", ns: "admin", query: { "query": {}, orderby: { "$natural": -1 } }, client: "0.0.0.0:0", desc: "rsMgr", threadId: "0x7f3e6af3f700", waitingForLock: false, numYields: 0, lockStats: { timeLockedMicros: { R: 1, W: 1 }, timeAcquiringMicros: { r: 1, w: 1 } }
最も興味深いフィールドは次のとおりです。
- オピッド- 操作のID。
- op- 実行中の操作。
- ns- 操作が実行されているデータベースとコレクション。
- secs_running- 操作が実行されている秒数。
実行時間の長い操作を特定したら、場合によってはそれらを終了することをお勧めします。使用する操作は次のとおりです。
db.killOp(<opid>)
言うまでもなく、このコマンドは慎重に使用する必要があります。知らない操作を終了しないでください。個人的には、実行時間の長いクエリを終了するのが快適だと感じています。
一貫して長い時間がかかる操作がある場合、MongoDBは別のオプションを提供します– maxTimeMS:
E.g. db.find(...).maxTimeMS(30)
実行時間が一定量を超えた後に停止したい長時間実行操作があることがわかっている場合は、maxTimeMSオプションを使用して、この操作の実行時間に制限を設定します。
ScaleGridでは、このワークフローの重要性を理解しているため、管理コンソールに組み込みました。クラスタの詳細ページの「管理者」コンソールから、MongoDBサーバーの操作リストにアクセスできます。
特定の操作を選択して、それを終了することもできます。いつものように、このオプションは慎重に行使してください: