2013-01-23 16 views
5

की आवश्यकता है, मैंने इसे पोस्ट करने के किसी भी उत्तर की अनुपस्थिति में this question in mongodb google group प्राप्त किया है।डाटाबेस की मरम्मत करने के लिए कितनी अतिरिक्त जगह

हमारे पास एक एकल नोड मोंगो (संस्करण 2.0.1) उदाहरण है। हम दैनिक संग्रह के बाद भी डिस्क स्थान से बाहर निकल रहे हैं क्योंकि मोंगो अंतरिक्ष को ओएस पर वापस नहीं लौटाता है और इसे स्वयं उपयोग करने का प्रयास करता है। वर्तमान में हमारे सेटअप निष्क्रिय होने के लगभग 50% अंतरिक्ष के साथ बहुत अस्पष्ट हो गया है। आप देख सकते हैं कि डेटा + इंडेक्स आकार लगभग 1170 जीबी है जबकि भंडारण का आकार लगभग 2158 जीबी है और फ़ाइल का आकार लगभग 2368 जीबी है।

db.stats()  
{ 
    "db" : "default",    
    "collections" : 106, 
    "objects" : 553988389, 
    "avgObjSize" : 2094.1392962010254, 
    "dataSize" : NumberLong("1160128855044"), 
    "storageSize" : NumberLong("2315777236208"), 
    "numExtents" : 1487, 
    "indexes" : 107, 
    "indexSize" : 97914435136, 
    "fileSize" : NumberLong("2543459500032"), 
    "nsSizeMB" : 16, 
    "ok" : 1 
} 

हम अंतरिक्ष को पुनः प्राप्त करना चाहते हैं और इस के रूप में एक महत्वपूर्ण मिशन प्रणाली (अपने लॉग के लिए एक डंपिंग यार्ड की तरह) एक डाउनटाइम बनाए रख सकते हैं नहीं है। हम एक प्रतिकृति सेट बनाने पर खर्च नहीं करना चाहते हैं, हम भी एक भौतिक डेटासेंटर में हैं इसलिए डेटाबेस की मरम्मत के लिए केवल अतिरिक्त डिस्क संलग्न नहीं करना पसंद करेंगे।
मुझे समझ में करना चाहते हैं: -
ज्यादा मुक्त डिस्क स्थान की मरम्मत डेटाबेस
-कैसे अधिक स्थान हम मरम्मत डेटाबेस
-Around कितना समय यह डेटाबेस की मरम्मत के लिए ले जाना चाहिए के बाद ठीक करने के लिए आशा कर सकते हैं के लिए आवश्यक है कि कैसे।
-अगर सभी मरम्मत डेटाबेस चल रहा है, तो बस इसे मारना और डेटाबेस को पुनरारंभ करना सुरक्षित है।

हमारे डेटा का एक हिस्सा एक संग्रह में है, इसलिए कॉम्पैक्ट संग्रह मरम्मत डेटाबेस से बेहतर होगा।

+1

मरम्मत 2X अंतरिक्ष करने के लिए आवश्यकता होती है सकते हैं होने के लिए परीक्षण करने के लिए होगा। –

+0

डेटा आकार या भंडारण आकार के 2 एक्स? – pseudonym

+0

मरम्मत '' mongodump'' और 'mongorestore'' करेगी और इसके लिए इसे आपके डेटाबेस का उपयोग करने वाले डिस्क स्थान की दो बार आवश्यकता होगी यानी पुराने और नई डेटाबेस फ़ाइलों को संग्रहीत करने के लिए स्थान की आवश्यकता है। इससे बचने के लिए आप मैन्युअल रूप से '' mongodump'' कर सकते हैं, डेटाबेस फ़ाइलों को हटा सकते हैं और फिर 'mongorestore'' चला सकते हैं। वैकल्पिक रूप से, अगर आपको केवल अप्रयुक्त स्थान पर पुनः दावा करने की आवश्यकता है तो आप 'कॉम्पैक्ट 'चला सकते हैं (सुनिश्चित करें कि आपके पास 2 जीबी खाली स्थान है)। – diliop

उत्तर

2

सबसे पहले मैं आपको 2.0.1 से अपग्रेड करने की सलाह दूंगा। कम से कम 2.0.7 यदि 2.2.2 नहीं है। मरम्मत 2x फ़ाइल आकार लेता है। आपको अपने फ़ाइल आकार के मुकाबले अपने डेटा आकार के मुकाबले थोड़ा बड़ा होना चाहिए। यह कितना समय लगता है सिस्टम संसाधनों पर निर्भर करता है और आपका सिस्टम कितना व्यस्त है। कॉम्पैक्ट डिस्क पर स्थान मुक्त नहीं करता है - यह केवल डेटा फ़ाइल के भीतर defragments।

2.2.x में आप फ़ाइल विखंडन को कम करने के usePowerOf2Sizes स्थापित करने के लिए collMod

आदेश का उपयोग कर सकते हैं। उदाहरण के लिए 800 बाइट दस्तावेज़ डालें और 1024 बाइट आवंटित किए जाएंगे। उस दस्तावेज़ को हटाएं और 900 बाइट डॉक डालें, अब 1024 स्पेस का पुन: उपयोग किया जा सकता है। इसके बिना शायद 850 बाइट आवंटित किए गए होंगे और 900 बाइट दस्तावेज़ के लिए नई खाली जगह आवंटित की जाएगी।

की हत्या repairDatabase ठीक होना चाहिए - फ़ाइलें, नए स्थान पर कॉपी कर रहे हैं defragg'd तो पूरा होने पर में वापस की नकल की है, लेकिन आप यह सुनिश्चित करें कि :)

+0

धन्यवाद @gregor वर्तमान में हम नियमित रूप से संग्रह कर रहे हैं लेकिन मोंगो मुक्त स्थान का उपयोग ठीक से करने में सक्षम नहीं है जिसे आप डेटा + इंडेक्स आकार और भंडारण आकार में अंतर से देख सकते हैं।यदि हम आगे बढ़ते हैं और डेटा को 'कॉम्पैक्ट' करते हैं तो क्या यह अंतरिक्ष (मोंगो के साथ मुक्त स्थान) का अधिक उपयोग करने का उपयोग शुरू कर देगा? अपग्रेड के अनुसार, वर्तमान में हम किसी भी बैंडविड्थ को निवेश नहीं करना चाहते हैं क्योंकि पूर्ण समाधान को कुछ महीनों में बदल दिया जा रहा है। इसके अलावा @ डीलीओप ने सुझाव दिया है कि 2 जीबी 'कॉम्पैक्ट' – pseudonym

+0

@ अपूरवा गौरव हाय के लिए पर्याप्त होगा, मैंने उन लोगों को देखा है जो बड़े लिखने के साथ उत्पादन में मोंगोडीबी का उपयोग करते हैं और हर सप्ताह जैसे नियमित आधार पर कॉम्पैक्ट करते हैं। उन्होंने इस तरह की एक स्क्रिप्ट भी स्वचालित रूप से करने के लिए लिखी और मरम्मत की वजह से यह हमेशा के लिए नहीं लगता है और भंडारण के x2 की आवश्यकता है। इसे देखें: http://blog.parse.com/2013/03/26/always-be-compacting/ और यहां गिथब पर कोड है: https://github.com/ParsePlatform/Ops/blob/master/ उपकरण/mongo_compact.rb – Maziyar

संबंधित मुद्दे