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 समस्या ट्रैकर को देखने / बढ़ाने के लिए कुछ प्रासंगिक फ़ीचर अनुरोध हैं, जो कि अधिक विस्तृत निष्पादन आँकड़े के बारे में / प्रोफ़ाइल एकत्रीकरण पाइपलाइनों को अनुकूलित करने में मदद करने के बारे में हैं: