MongoDB में स्पेस रिक्लेमेशन पर कुछ काफी भ्रम की स्थिति रही है, और कुछ अनुशंसित अभ्यास कुछ तैनाती प्रकारों में करने के लिए बिल्कुल खतरनाक हैं। नीचे अधिक जानकारी:
TL, DR repairDatabase
एक स्टैंडअलोन MongoDB तैनाती से डेटा को उबारने का प्रयास करता है जो एक डिस्क भ्रष्टाचार से उबरने की कोशिश कर रहा है। यदि यह अंतरिक्ष को पुनः प्राप्त करता है, तो यह विशुद्ध रूप से एक दुष्प्रभाव है । रिकवरिंग स्पेस को चलाने का प्राथमिक विचार कभी नहीं होना चाहिए repairDatabase
।
एक स्टैंडअलोन नोड में स्थान पुनर्प्राप्त करें
WiredTiger: WiredTiger के साथ एक स्टैंडअलोन नोड के लिए, रनिंग compact
ओएस को एक कैविएट के साथ अंतरिक्ष जारी करेगा: compact
MongoDB 3.0.x पर WiredTiger की कमान इस बग से प्रभावित हुई थी: SERVER-21833 जो MongoDB 3.2.3 में तय की गई थी। इस संस्करण से पहले, compact
वायर्डटाइगर पर चुपचाप विफल हो सकता था।
MMAPv1: MMAPv1 के काम करने के तरीके के कारण, MMAPv1 संग्रहण इंजन का उपयोग करके अंतरिक्ष को पुनर्प्राप्त करने के लिए कोई सुरक्षित और समर्थित तरीका नहीं है। compact
MMAPv1 में डेटा फ़ाइलों को डीफ़्रैग्मेन्ट करेगा, संभवतः नए दस्तावेज़ों के लिए अधिक स्थान उपलब्ध कराएगा, लेकिन यह ओएस पर वापस अंतरिक्ष को रिलीज़ नहीं करेगा।
आप कर सकते हैं चलाने में सक्षम हो repairDatabase
, तो आप पूरी तरह से इस के परिणामों को समझने संभावित खतरनाक , आदेश (देखें नीचे) के बाद से repairDatabase
अनिवार्य रूप से भ्रष्ट दस्तावेजों की निकालने से पूरे डेटाबेस का पुनर्लेखन। साइड इफेक्ट के रूप में, यह इस पर किसी भी विखंडन के बिना नए MMAPv1 डेटा फ़ाइलों को बनाएगा और ओएस पर वापस अंतरिक्ष को रिलीज़ करेगा।
एक कम साहसी विधि के लिए, दौड़ना mongodump
और mongorestore
MMAPv1 परिनियोजन में आपकी तैनाती के आकार के अधीन संभव हो सकता है।
एक प्रतिकृति सेट में स्थान पुनर्प्राप्त करें
प्रतिकृति सेट कॉन्फ़िगरेशन के लिए, अंतरिक्ष को पुनर्प्राप्त करने के लिए सबसे अच्छा और सबसे सुरक्षित तरीका है , WiredTiger और MMAPv1 दोनों के लिए एक प्रारंभिक सिंक करना।
यदि आपको सेट में सभी नोड्स से स्थान पुनर्प्राप्त करने की आवश्यकता है, तो आप एक रोलिंग प्रारंभिक सिंक कर सकते हैं। यही है, प्राथमिक से नीचे कदम रखने और उस पर प्रारंभिक सिंक करने से पहले, प्रत्येक सेकंड पर प्रारंभिक सिंक का प्रदर्शन करें। प्रारंभिक सिंक विधि को रोल करना प्रतिकृति सेट रखरखाव करने के लिए सबसे सुरक्षित तरीका है, और इसमें बोनस के रूप में कोई डाउनटाइम भी शामिल नहीं है।
कृपया ध्यान दें कि एक रोलिंग प्रारंभिक सिंक करने की व्यवहार्यता आपकी तैनाती के आकार पर भी निर्भर करती है। बहुत बड़ी तैनाती के लिए, प्रारंभिक सिंक करना संभव नहीं है, और इस तरह आपके विकल्प कुछ हद तक सीमित हैं। यदि वायर्डटाइगर का उपयोग किया जाता है, तो आप सेट से एक सेकेंडरी ले सकते हैं, इसे स्टैंडअलोन के रूप में शुरू कर सकते हैं, इस compact
पर चला सकते हैं, और इसे सेट पर रिजेक्ट कर सकते हैं ।
के बारे में repairDatabase
कृपया repairDatabase
प्रतिकृति सेट नोड्स पर न चलें । यह बहुत खतरनाक है, जैसा कि मरम्मतडॉटबेस पेज में वर्णित है और नीचे अधिक विवरण में वर्णित है।
नाम repairDatabase
थोड़ा भ्रामक है, क्योंकि कमांड कुछ भी सुधारने का प्रयास नहीं करता है। कमांड का उपयोग तब किया जाता था जब स्टैंडअलोन नोड पर डिस्क भ्रष्टाचार हो, जिससे भ्रष्ट दस्तावेज़ हो सकते हैं।
repairDatabase
आदेश और अधिक सही रूप में "उबार डेटाबेस" में वर्णित किया जा सकता है। यही है, यह डेटाबेस को एक स्थिति में लाने के प्रयास में भ्रष्ट दस्तावेजों को हटाकर डेटाबेस को फिर से बनाता है जहां आप इसे शुरू कर सकते हैं और इससे बरकरार दस्तावेज़ को बचा सकते हैं।
MMAPv1 परिनियोजन में, डेटाबेस फ़ाइलों का यह पुनर्निर्माण साइड इफेक्ट के रूप में ओएस के लिए स्थान जारी करता है । ओएस के लिए अंतरिक्ष को जारी करना कभी उद्देश्य नहीं था।
repairDatabase
एक प्रतिकृति सेट पर परिणाम
प्रतिकृति सेट में, MongoDB समान डेटा समाहित करने के लिए सेट में सभी नोड्स की अपेक्षा करता है। यदि आप repairDatabase
एक प्रतिकृति सेट नोड पर चलते हैं , तो एक मौका है कि नोड में repairDatabase
अवांछित भ्रष्टाचार होता है, और आप के लिए भ्रष्ट दस्तावेजों को सावधानीपूर्वक हटा देगा।
निश्चित रूप से, यह बनाता है कि नोड में सेट के बाकी हिस्सों से एक अलग डेटासेट है। यदि एक अद्यतन उस एकल दस्तावेज़ को हिट करने के लिए होता है, तो पूरा सेट क्रैश हो सकता है।
मामलों को बदतर बनाने के लिए, यह पूरी तरह से संभव है कि यह स्थिति लंबे समय तक निष्क्रिय रह सकती है, केवल बिना किसी स्पष्ट कारण के अचानक हड़ताल करने के लिए।