MongoDB में explain() का उपयोग करके क्वेरी एक्ज़ीक्यूशन प्लान विश्लेषण करना
MongoDB में किसी क्वेरी के एक्ज़ीक्यूशन प्लान को समझने के लिए explain() मेथड का उपयोग करें। यह बताता है कि क्वेरी कैसे निष्पादित होगी - इंडेक्स उपयोग, स्कैन प्रकार, और प्रदर्शन मेट्रिक्स।
उदाहरण: संग्रह, दस्तावेज़ और इंडेक्स बनाना
> db.demo408.insertOne({"Value":50});
{ "acknowledged" : true, "insertedId" : ObjectId("5e70e3a115dc524f70227678") }
> db.demo408.insertOne({"Value":20});
{ "acknowledged" : true, "insertedId" : ObjectId("5e70e3a715dc524f70227679") }
> db.demo408.insertOne({"Value":45});
{ "acknowledged" : true, "insertedId" : ObjectId("5e70e3ac15dc524f7022767a") }
> db.demo408.insertOne({"Value":35});
{ "acknowledged" : true, "insertedId" : ObjectId("5e70e3af15dc524f7022767b") }
> db.demo408.createIndex({Value:1});
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
सभी दस्तावेज़ देखना
> db.demo408.find();
आउटपुट:
{ "_id" : ObjectId("5e70e3a115dc524f70227678"), "Value" : 50 }
{ "_id" : ObjectId("5e70e3a715dc524f70227679"), "Value" : 20 }
{ "_id" : ObjectId("5e70e3ac15dc524f7022767a"), "Value" : 45 }
{ "_id" : ObjectId("5e70e3af15dc524f7022767b"), "Value" : 35 }
क्वेरी प्लान विश्लेषण (Value > 40)
> db.demo408.explain().find( { Value: { $gt: 40 } } );
आउटपुट (मुख्य भाग):
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "test.demo408",
"indexFilterSet" : false,
"parsedQuery" : { "Value" : { "$gt" : 40 } },
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : { "Value" : 1 },
"indexName" : "Value_1",
"isMultiKey" : false,
"direction" : "forward",
"indexBounds" : { "Value" : [ "(40.0, inf.0]" ] }
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : { "host" : "...", "port" : 27017, "version" : "4.0.5" },
"ok" : 1
}
मुख्य स्टेज व्याख्या:
- IXSCAN: इंडेक्स स्कैन - इंडेक्स का उपयोग करके दस्तावेज़ खोजे गए
- FETCH: इंडेक्स से मिले दस्तावेज़ों को लाना
- COLLSCAN: कलेक्शन स्कैन - इंडेक्स नहीं उपयोग हुआ (खराब प्रदर्शन)
- indexBounds: इंडेक्स में स्कैन की गई रेंज
- rejectedPlans: अस्वीकृत वैकल्पिक प्लान
explain() मोड्स:
explain("queryPlanner")- केवल प्लानर जानकारी (डिफ़ॉल्ट)explain("executionStats")- वास्तविक एक्ज़ीक्यूशन आंकड़ेexplain("allPlansExecution")- सभी प्लान्स के आंकड़े
प्रदर्शन ट्यूनिंग: यदि COLLSCAN दिखे, तो उचित इंडेक्स बनाएं।