MongoDB: रैम आवश्यकताओं


20

क्या यह मेमोरी / रैम में पूरे इंडेक्स के लिए पर्याप्त है या मोंगोडब भी तेजी से रीड के लिए डेटा स्टोर करने के लिए जितना संभव हो उतना राम आवंटित करने की कोशिश करता है?

मैं मोंगोडब + अन्य एप्लिकेशन चलाना चाहता हूं और ऐसा लगता है कि मोंगोडब एकमात्र ऐसा है जो मुझे रैम की एक सीमा को परिभाषित करने की अनुमति नहीं देता है, जिससे "max_memory_allocated_or_reserved = 8GB" कहते हैं।

यदि ऐसा करने का कोई तरीका नहीं है, तो मुझे ऊम-हत्यारे को समझाना चाहिए कि मोंगॉड "खराब" प्रक्रिया है जो मेरी राय में सबसे अच्छा अभ्यास नहीं है ...

जवाबों:


18

असली कारण आप ऐसा नहीं कर सकते जैसा कि आप पूछते हैं (मेमोरी को सीमित करें) क्योंकि MongoDB सीधे उपयोग की जाने वाली मेमोरी का प्रबंधन नहीं करता है - यह ओएस को ऐसा करने देता है। MongoDB बस मेमोरी अपने सभी डेटा को मैप करता है और फिर आवश्यकतानुसार ओएस पेज को मेमोरी के अंदर और बाहर करता है। नतीजतन, जब तक कि MongoDB इसे पूरी तरह से अलग तरीके से लागू नहीं करता है, तब तक राशि का कोई प्रत्यक्ष प्रबंधन नहीं है, या OS इसे अनुमति देता है (2.4 दिनों के बाद से लिनक्स में संभव नहीं है)।

वर्तमान में संसाधनों को वास्तव में अलग करने का एकमात्र तरीका एक वर्चुअलाइजेशन समाधान का उपयोग करना और अपने स्वयं के वीएम में MongoDB को अलग करना है। हां, इसमें ओवरहेड्स शामिल हैं (हालांकि हाइपरवाइजर्स ने बहुत बेहतर प्राप्त किया है), लेकिन उस समय संसाधन नियंत्रण के उस स्तर के लिए भुगतान की जाने वाली कीमत है।

ओओएम किलर के संदर्भ में, यहां तक ​​कि मेजबान पर कोई अन्य प्रक्रिया नहीं होने तक, जब तक कि आपका डेटा सेट और इंडेक्स समग्र रूप से उपलब्ध मेमोरी से अधिक नहीं हो जाता है, तब तक मोंगोडीबी ओओएम किलर मुद्दों को हिट कर सकता है। इसका कारण यह है कि डेटा को मेमोरी से बाहर कैसे निकाला जाता है - अगर कोई मेमोरी प्रेशर नहीं है (कुछ और नहीं रेजिडेंट मेमोरी चाहते हैं), और आप नए डेटा और इंडेक्स को जोड़ते / छूते रहते हैं, तो अंततः यह सभी उपलब्ध रैम का उपभोग करने के लिए बढ़ेगा। इसलिए MongoDB चलाते समय हमेशा कुछ स्वैप कॉन्फ़िगर करने की सिफारिश:

https://docs.mongodb.com/manual/administration/production-notes/#swap

बेशक, एलआरयू डेटा को पहले बाहर रखा जाएगा, अन्य प्रक्रियाएं रिस मेम भी ले सकती हैं, लेकिन अवधारणा अभी भी लागू होती है जब तक कि आप अपने डेटा को मेमोरी में सेट नहीं करते हैं और तब यह स्थिर रहता है। यदि आप चिंतित हैं तो सबसे अच्छी बात यह है कि इसे एमएमएस में ले लें और समय के साथ उपयोग को ट्रैक करें:

http://mms.mongodb.com

अपडेट: अगस्त २०१५

जब से मैंने यह उत्तर लिखा है कि चीजें कुछ हद तक आगे बढ़ गई हैं और जानकारी थोड़ी पुरानी है। उदाहरण के लिए, लिनक्स में अब cgroups और संबंधित प्रौद्योगिकियां ( उदाहरण के लिए डॉकटर कंटेनर ) हैं जो इस बिंदु पर परिपक्व हो गए हैं कि वे आपको उत्पादन पर्यावरण में किसी भी प्रक्रिया द्वारा खपत संसाधनों ( मेमोरी सहित ) को बेहतर ढंग से अलग करने और सीमित करने की अनुमति देते हैं , यहां तक ​​कि एक का उपयोग करता है स्मृति मानचित्रण MongoDB की तरह।

इसके अतिरिक्त, एमएमएपी से परे नए स्टोरेज इंजन के आगमन के साथ जैसे मोंगोबीडी 3.0 में वायर्डटाइगर आप मोंगोबीडी के लिए कैश आकार को सीमित करने के लिए अंतर्निहित कार्यक्षमता का उपयोग कर सकते हैं । इसलिए, RAM आवश्यकताएँ अब वास्तव में इस बात पर निर्भर करती हैं कि आप MongoDB को कॉन्फ़िगर करने के लिए कैसे चुनते हैं, आप इसे किस वातावरण में चलाते हैं और आप कौन सा संग्रहण इंजन चुनते हैं।


WiredTiger के बारे में: "Storage.wiredTiger.engineConfig.cacheSizeGB केवल WiredTiger कैश के आकार को सीमित करता है, न कि मैंगोड द्वारा उपयोग की जाने वाली मेमोरी की कुल मात्रा। WiredTiger कैश केवल MongoDB द्वारा उपयोग की जाने वाली RAM का एक घटक है। MongoDB भी स्वचालित रूप से सभी का उपयोग करता है। फाइलसिस्टम कैश के माध्यम से मशीन पर मुफ्त मेमोरी ... "
स्टीफन रोजिन

सही है, लेकिन वही किसी भी एप्लिकेशन के बारे में कहा जा सकता है जो डिस्क से डेटा को पेज करता है, एफएस कैश अब डेटा के लिए प्राथमिक कैशिंग विधि नहीं है क्योंकि यह एक बार MMAP स्टोरेज इंजन में मेमोरी मैप्ड फाइलों के साथ था
एडम सी

6

MongoDB कैशिंग के लिए उपलब्ध मुफ्त मेमोरी का उपयोग करेगा, और उसी सर्वर पर अन्य एप्लिकेशन को मेमोरी देने के लिए डिस्क को स्वैप करने की आवश्यकता होगी। सबसे अच्छे प्रदर्शन के लिए आप अपने सूचकांकों और अक्सर उपयोग किए जाने वाले डेटा ("वर्किंग सेट") को स्मृति में रखने के लिए पर्याप्त रैम चाहते हैं।

उपयोगी पढ़ने:


3

मोंटेबीडीबी के बारे में वर्षों में सोमथिंग्स को बदल दिया जाता है।

टी एल; डॉ

यदि MMAPv1 स्टोरेज इंजन का उपयोग MongoDB working setआकार पर किया जाता है तो RAM को फिट करना होगा । https://docs.mongodb.com/manual/faq/diagnostics/#must-my-working-set-size-fit-ram

यदि WiredTiger स्टोरेज इंजन का उपयोग MongoDB पर किया जाता है, तो रैम के बारे में चिंता करने की आवश्यकता नहीं है working setया नहींhttps://docs.mongodb.com/manual/faq/diagnostics/#memory-diagnostics-for-the-wiredtiger-storage-engine

वायर्डटेगर स्टोरेज इंजन के लिए मेमोरी डायग्नोस्टिक्स

मेरे काम करने का सेट आकार फिट होना चाहिए RAM?

नहीं।

मैं कैसे गणना करूं कि मुझे अपने आवेदन के लिए कितनी रैम की आवश्यकता है?

WiredTiger के साथ, MongoDB WiredTiger आंतरिक कैश और फ़ाइल सिस्टम कैश दोनों का उपयोग करता है।

संस्करण 3.2 में परिवर्तित: MongoDB 3.2 में शुरू, WiredTiger आंतरिक कैश डिफ़ॉल्ट रूप से, दोनों में से किसी एक का उपयोग करेगा:

60% रैम माइनस 1 जीबी, या 1 जीबी।


अच्छी तरह से यह जवाब बहुत मदद नहीं है, और न ही बहुत सटीक है।
फिलिप शिफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.