MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでexplain()を使ってコレクションのクエリ実行統計を取得する方法

MongoDBでクエリの実行統計(実行プランや処理時間など)を取得するには、explain()メソッドを使用します。特に"executionStats"モードを指定すると、実際にクエリを実行した結果に基づく詳細な統計情報を確認できます。

1. コレクションとドキュメントの作成

まず、insertOne()を使ってサンプルのコレクションにドキュメントを挿入します。

> db.demo157.insertOne({"Status":"Active"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e354fdffdf09dd6d08539fc")
}
> db.demo157.insertOne({"Status":"InActive"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e354fe3fdf09dd6d08539fd")
}

2. find()ですべてのドキュメントを表示

find()メソッドを使うと、コレクション内のすべてのドキュメントを取得して確認できます。

> db.demo157.find();

このクエリを実行すると、以下のような出力が得られます。

{ "_id" : ObjectId("5e354fdffdf09dd6d08539fc"), "Status" : "Active" }
{ "_id" : ObjectId("5e354fe3fdf09dd6d08539fd"), "Status" : "InActive" }

3. explain("executionStats")で実行統計を取得

MongoDBでexplain()を実装する方法は次のとおりです。引数に"executionStats"を指定することで、クエリが実際にどのように実行されたかの詳細な統計を取得できます。

> db.demo157.find({Status: { $in: ['Active','InActive'] }}).explain("executionStats");

このクエリを実行すると、以下のような出力が得られます。

{
   "queryPlanner" : {
      "plannerVersion" : 1,
      "namespace" : "test.demo157",
      "indexFilterSet" : false,
      "parsedQuery" : {
         "Status" : {
            "$in" : [
               "Active",
               "InActive"
            ]
         }
      },
      "winningPlan" : {
         "stage" : "COLLSCAN",
         "filter" : {
            "Status" : {
               "$in" : [
                  "Active",
                  "InActive"
               ]
            }
         },
         "direction" : "forward"
      },
      "rejectedPlans" : [ ]
   },
   "executionStats" : {
      "executionSuccess" : true,
      "nReturned" : 2,
      "executionTimeMillis" : 18,
      "totalKeysExamined" : 0,
      "totalDocsExamined" : 2,
      "executionStages" : {
         "stage" : "COLLSCAN",
         "filter" : {
            "Status" : {
               "$in" : [
                  "Active",
                  "InActive"
               ]
            }
         },
         "nReturned" : 2,
         "executionTimeMillisEstimate" : 0,
         "works" : 4,
         "advanced" : 2,
         "needTime" : 1,
         "needYield" : 0,
         "saveState" : 0,
         "restoreState" : 0,
         "isEOF" : 1,
         "invalidates" : 0,
         "direction" : "forward",
         "docsExamined" : 2
      }
   },
   "serverInfo" : {
      "host" : "DESKTOP-QN2RB3H",
      "port" : 27017,
      "version" : "4.0.5",
      "gitVersion"
      "3739429dd92b92d1b0ab120911a23d50bf03c412"
   },
   "ok" : 1
}

出力結果の主な項目の見方

  • nReturned: クエリによって返されたドキュメント数。この例では2件です。
  • executionTimeMillis: クエリの実行にかかった時間(ミリ秒)。
  • totalDocsExamined: クエリ実行時にスキャンされたドキュメントの総数。
  • totalKeysExamined: スキャンされたインデックスキーの数。インデックス未使用の場合は0になります。
  • stage: "COLLSCAN": コレクション全体をスキャン(フルコレクションスキャン)していることを示します。インデックスが使われている場合は「IXSCAN」と表示されます。

これらの情報を確認することで、クエリが効率的に実行されているか、インデックスを追加すべきかなどを判断できます。totalDocsExaminednReturnedに対して大きすぎる場合、適切なインデックスを作成することでパフォーマンスを大幅に改善できる可能性があります。

  1. MongoDBコレクションの全キー(フィールド名)を取得する方法まとめ

    この記事は2019年1月18日にObjectRocket.com/blogで公開された内容をもとにしています。 MongoDB®のコレクションに含まれるすべてのキーを把握することは、スキーマの検証、フィールド名のタイプミスのデバッグ、設定すべきでないフィールドの発見など、さまざまな場面で役立ちます。本記事では、MongoDBコレクション内の全キー名を取得する複数の方法を、状況別にわかりやすく解説します。 まず検討したい:ODMやマネージドサービスの活用 ObjectRocketをはじめとする多くのMongoDB-as-a-Service事業者は、ユーザーインターフェース(UI)上で簡単にキーを

  2. MongoDBコレクション内の全キー名を取得する方法|MapReduce・Aggregation・シェルなど状況別に解説

    スキーマの検証、フィールド名のタイプミスのデバッグ、設定されるべきではないフィールドの発見などを行うには、まずMongoDBコレクション内にどのようなキーが存在するのかを把握しておく必要があります。多くのMongoDB-as-a-Service事業者は、UI上で手軽にこれを実現できる機能を提供しています(ObjectRocketもそのひとつです)。また、経験豊富なMongoDBユーザーの多くは、JavaScript向けのMongooseやPython向けのMongoengineといったオブジェクトドキュメントマッパー(ODM)を導入しています。ODMを使えば、アプリケーション向けの一貫性のある