MongoDB संस्करण 3.0 से शुरू होकर, बस क्रम को
. से बदल रहा हैcollection.aggregate(...).explain()
करने के लिए
collection.explain().aggregate(...)
आपको वांछित परिणाम देगा (दस्तावेज़ीकरण यहाँ)।
पुराने संस्करणों>=2.6 के लिए, आपको explain
. का उपयोग करना होगा एकत्रीकरण पाइपलाइन संचालन के लिए विकल्प
explain:true
db.collection.aggregate([
{ $project : { "Tags._id" : 1 }},
{ $unwind : "$Tags" },
{ $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}},
{ $group: {
_id : "$_id",
count: { $sum:1 }
}},
{$sort: {"count":-1}}
],
{
explain:true
}
)
एग्रीगेशन फ्रेमवर्क के साथ एक महत्वपूर्ण विचार यह है कि एक इंडेक्स का उपयोग केवल एक पाइपलाइन के लिए प्रारंभिक डेटा लाने के लिए किया जा सकता है (उदाहरण के लिए $match
का उपयोग) , $sort
, $geonear
पाइपलाइन की शुरुआत में) और साथ ही बाद के $lookup
और $graphLookup
चरण। एक बार प्रसंस्करण के लिए डेटा एकत्रीकरण पाइपलाइन में लाया गया है (उदाहरण के लिए $project
जैसे चरणों से गुजरना , $unwind
, और $group
) आगे की हेराफेरी इन-मेमोरी होगी (संभवतः अस्थायी फ़ाइलों का उपयोग करते हुए यदि allowDiskUse
विकल्प सेट है)।
पाइपलाइनों को अनुकूलित करना
सामान्य तौर पर, आप निम्न द्वारा एकत्रीकरण पाइपलाइनों को अनुकूलित कर सकते हैं:
- एक
$match
के साथ एक पाइपलाइन शुरू करना प्रसंस्करण को प्रासंगिक दस्तावेजों तक सीमित रखने का चरण। - शुरुआती
$match
सुनिश्चित करना /$sort
चरणों को एक कुशल अनुक्रमणिका द्वारा समर्थित किया जाता है। $match
. का उपयोग करके डेटा को जल्दी फ़िल्टर करना ,$limit
, और$skip
।- अनावश्यक चरणों और दस्तावेज़ हेरफेर को कम करना (यदि जटिल एकत्रीकरण जिमनास्टिक की आवश्यकता हो तो शायद अपने स्कीमा पर पुनर्विचार करें)।
- यदि आपने अपने MongoDB सर्वर को अपग्रेड किया है, तो नए एकत्रीकरण ऑपरेटरों का लाभ उठाएं। उदाहरण के लिए, MongoDB 3.4 ने कई नए एकत्रीकरण चरणों और अभिव्यक्तियों को जोड़ा, जिसमें सरणियों, स्ट्रिंग्स और पहलुओं के साथ काम करने के लिए समर्थन शामिल है।
कई एकत्रीकरण पाइपलाइन अनुकूलन भी हैं जो आपके MongoDB सर्वर संस्करण के आधार पर स्वचालित रूप से होते हैं। उदाहरण के लिए, आउटपुट परिणामों को प्रभावित किए बिना निष्पादन में सुधार के लिए आसन्न चरणों को समेकित और/या पुन:व्यवस्थित किया जा सकता है।
सीमाएं
MongoDB 3.4 की तरह, एग्रीगेशन फ्रेमवर्क explain
विकल्प इस बारे में जानकारी प्रदान करता है कि एक पाइपलाइन को कैसे संसाधित किया जाता है, लेकिन executionStats
के समान स्तर के विवरण का समर्थन नहीं करता है find()
. के लिए मोड सवाल। यदि आप प्रारंभिक क्वेरी निष्पादन को अनुकूलित करने पर ध्यान केंद्रित कर रहे हैं, तो संभवतः आपको समकक्ष find().explain()
की समीक्षा करना फायदेमंद लगेगा। executionStats
. के साथ क्वेरी या allPlansExecution
वाचालता।
अनुकूलन/प्रोफ़ाइल एकत्रीकरण पाइपलाइनों में सहायता के लिए अधिक विस्तृत निष्पादन आँकड़ों के संबंध में MongoDB इश्यू ट्रैकर में देखने/अपवोट करने के लिए कुछ प्रासंगिक सुविधा अनुरोध हैं:
- SERVER-19758:"निष्पादन आँकड़े" और "allPlansExecution" जोड़ें, एकत्रीकरण की व्याख्या करने के तरीके की व्याख्या करें
- SERVER-21784:प्रत्येक एकत्रीकरण पाइपलाइन चरण के लिए निष्पादन आंकड़े ट्रैक करें और व्याख्या के माध्यम से उजागर करें
- SERVER-22622:"से" संग्रह पर क्वेरी योजना को इंगित करने के लिए $lookup व्याख्या में सुधार करें