$currentOp
集計ステージでは、 MongoDBで現在実行中すべての操作に関する情報が提供されます。アプリケーションにパフォーマンスの問題が発生している場合は、このステージの周囲に集計パイプラインをビルドして、低速クエリや同様の問題を監視できます。
このタスクについて
データベースプロファイラー
このタスクは$currentOp
を使用して、アプリケーションで現在実行中低速クエリを識別します。指定された期間内のすべての低速クエリを見つけるには、プロファイラーの使用を検討してください。
プロファイラー | 説明 |
---|---|
Atlas のカスタマーに 散布図チャートを提供し、低速クエリやパフォーマンスの例外を簡単に特定できるようにします。 | |
クエリ パフォーマンス情報をコレクションに保存し、特定のパフォーマンス問題を持つクエリをMongoDBに照会できます。 |
Atlas クエリプロファイラーとデータベースプロファイラ はどちらも、サーバーのパフォーマンスに影響を与え、ディスク領域を使用し、暗号化されたフィールドのクエリ メタメタデータを公開する可能性があります。 有効にする前に、パフォーマンスとセキュリティへの影響を検討してください。
Explain クエリ
このタスクは、パフォーマンスの問題があるクエリを識別します。パフォーマンスの問題が発生するクエリをすでにわかっている場合は、低速クエリの説明を参照してそのトラブルシューティングを行います。
手順
現在の操作を取得します。
MongoDBから現在の操作を取得するには、$currentOp
集計ステージを使用します。
db.getSiblingDB("admin").aggregate( [ { $currentOp: { allUsers: true } }, { $match: { secs_running: { $gt: 2 } } }, { $sort: { secs_running: 1 } } ] )
[ { "opid": "12345", "secs_running": 5, "active": true, "ns": "sample_mflix.movies", "command": { "find": "movies", "filter": { "title": { "$regex": "The" } } }, "planSummary": "COLLSCAN", "locks": { ... }, "client": "203.0.113.25:43210" } ]
この集計パイプラインは、クラスター内のすべての現在の操作を検索します。 The $match
集計ステージでは、2 秒以上実行中ている操作に操作がフィルタリングされます。これにより、指定した期間内に実行されるクエリをフィルタリングできます。アプリケーションとデータベースのニーズに合わせて値を調整します。
$sort
ステージでは、optime の昇順で結果がソートされます。
アクティビティを確認します。
currentOp.active
フィールドを表示します。currentOp.active
が true
の場合、 MongoDB は操作が現在実行中であることを示します。
長時間実行中操作を停止するには、db.killOp()
メソッドを使用して、指定された opid
を停止します。
ロックを確認します。
currentOp.waitingForLock
フィールドを表示します。currentOp.waitingForLock
が true
の場合、サーバーまたはクラスターで実行中の別の操作がクエリをブロックしています。
ブロックされた操作を停止するには、db.killOp()
メソッドを使用して指定された opid
を停止します。
プランの概要を確認します。
currentOp.planSummary
フィールドの値を確認します。
IXSCAN
- クエリがインデックススキャンを実行したことを示します。
COLLSCAN
- クエリが フルコレクションスキャンを実行したことを示します。これを修正するには、インデックスを作成します。
クエリを説明します。
$currentOp
集計ステージによって追加の調査が必要なクエリが返される場合は、explain()
メソッドを使用してクエリプランと実行統計を分析します。
詳細については、低速クエリの説明を参照してください。