मैं दिखाई दे रही है की एक बड़ी संख्या से पीड़ित एक विशाल (~ 200 ++) दोष/सेकंड मेरी mongostat उत्पादन में नंबर, हालांकि बहुत कम ताला%:मोंगो दोष
मेरे मोंगो सर्वर अमेज़न बादल पर m1.large उदाहरणों पर चल रहे हैं, ताकि वे एक रैम ::
root:~# free -tm
total used free shared buffers cached
Mem: 7700 7654 45 0 0 6848
जाहिर है, मैं पर्याप्त स्मृति सभी cahing मोंगो के लिए करना चाहता है की जरूरत नहीं है की 7.5GB (जो, btw, डिस्क आईओ के कारण, विशाल CPU उपयोग% में परिणाम)।
मुझे this document मिला जो बताता है कि मेरे परिदृश्य (उच्च गलती, कम ताला%) में, मुझे "पढ़ने को स्केल करना" और "अधिक डिस्क IOPS" की आवश्यकता है।
मैं इस बारे में सलाह ले रहा हूं कि इसे कैसे प्राप्त किया जाए। अर्थात्, मेरे node.js एप्लिकेशन द्वारा निष्पादित विभिन्न संभावित प्रश्नों के बहुत सारे हैं, और मुझे यकीन नहीं है कि बाधा कहां हो रही है। बेशक, मैं
db.setProfilingLevel(1);
की कोशिश की है हालांकि, इस मुझे इतना मदद नहीं करता है, क्योंकि outputted आँकड़े बस मुझे धीमा क्वेरी दिखा, लेकिन मैं एक मुश्किल समय है कि जो जानकारी में प्रश्न है अनुवाद करने आ रही हैं के कारण पेज दोष ...
आप देख सकते हैं, इस, मेरी प्राथमिक मोंगो सर्वर पर एक विशाल (लगभग 100%) सीपीयू प्रतीक्षा समय में जिसके परिणामस्वरूप है, हालांकि 2x द्वितीयक सर्वर अप्रभावित रहे हैं ...
यहां क्या है मोंगो डॉक्स को पृष्ठ दोषों के बारे में कहना है:
पृष्ठ दोष उस समय की संख्या का प्रतिनिधित्व करते हैं जब मोंगोडीबी को भौतिक स्मृति में स्थित डेटा की आवश्यकता नहीं होती है, और वर्चुअल मेमोरी से पढ़ना आवश्यक है। पेज दोषों की जांच करने के लिए, serverStatus कमांड में extra_info.page_faults मान देखें। यह डेटा केवल लिनक्स सिस्टम पर उपलब्ध है।
अकेले, पेज दोष छोटे हैं और जल्दी से पूर्ण होते हैं; हालांकि, कुल मिलाकर, पेज गलती की बड़ी संख्या आम तौर पर इंगित करती है कि मोंगोडीबी डिस्क से बहुत अधिक डेटा पढ़ रहा है और कई अंतर्निहित कारणों और सिफारिशों को इंगित कर सकता है। कई स्थितियों में, मोंगो डीबी के पढ़ने वाले ताले किसी पृष्ठ की गलती के बाद "उपज" करेंगे, जिससे अन्य प्रक्रियाओं को पढ़ने और ब्लॉकिंग से बचने के लिए अगले पृष्ठ की स्मृति में पढ़ने के लिए इंतजार किया जा सकेगा। यह दृष्टिकोण समरूपता में सुधार करता है, और उच्च मात्रा प्रणाली में यह समग्र थ्रूपुट में भी सुधार करता है।
यदि संभव हो तो, मोंगोडीबी के लिए पहुंच योग्य रैम की मात्रा में वृद्धि पृष्ठ त्रुटियों की संख्या को कम करने में मदद कर सकती है। यदि यह संभव नहीं है, तो आप मोंडोड उदाहरणों के बीच लोड वितरित करने के लिए एक शेर्ड क्लस्टर को तैनात करने और/या अपनी तैनाती में एक या अधिक शर्ट जोड़ने पर विचार करना चाह सकते हैं।
तो, मैं सिफारिश की कमान है, जो बहुत बेकार है की कोशिश की:
PRIMARY> db.serverStatus().extra_info
{
"note" : "fields vary by platform",
"heap_usage_bytes" : 36265008,
"page_faults" : 4536924
}
बेशक, मैं सर्वर आकार (अधिक रैम) को बढ़ा सकता है, लेकिन यह महंगा है और overkill हो रहा है। मुझे sharding लागू करना चाहिए, लेकिन मैं वास्तव में अनिश्चित हूँ कि संग्रह को किनारे की जरूरत है! इस प्रकार, मुझे अलग-अलग तरीके से अलग करने का तरीका चाहिए जहां दोष हो रहे हैं (कौन से विशिष्ट आदेश दोष पैदा कर रहे हैं)।
सहायता के लिए धन्यवाद।
मुझे पता है कि यह एक पुराना सवाल है, लेकिन कुछ चीजें बाहर निकलती हैं। 'Db.setProfilingLevel (1) 'सेट करने के बाद आपको उन प्रश्नों को लेने और उन्हें' व्याख्या() 'चलाने की आवश्यकता है। सबसे अधिक संभावना है कि ये प्रश्न इंडेक्स का उपयोग नहीं कर रहे हैं और पूर्ण संग्रहण स्कैन कर रहे हैं। निष्क्रिय होने के आपके सेकेंडरी चिंता का एक और कारण है, आपके आवेदन सेटिंग 'गुलाम ओके = सच्चे' के आधार पर सेकंड लोड पर कुछ लोड डालकर मदद मिल सकती है। मैं यह सुनिश्चित कर दूंगा कि आपकी अनुक्रमणिका पहले ठीक है या आप केवल दूसरी बार दुखों को फैल रहे हैं। – hwatkins