Postgres में Zeroing WAL सेगमेंट


9

हमारे पास प्रत्येक वाल सेगमेंट को संपीड़ित करने और इसे S3 में भेजने के लिए निरंतर संग्रह के साथ एक अपेक्षाकृत कम मात्रा वाला पोस्टग्रैज डेटाबेस है। क्योंकि यह एक कम-वॉल्यूम प्रणाली है, यह archive_timeoutहर 10 मिनट या तो हिट करता है और ज्यादातर-अप्रयुक्त वाल सेगमेंट को संग्रहीत करता है, जो बहुत अच्छी तरह से संपीड़ित करता था क्योंकि यह ज्यादातर सिर्फ शून्य था।

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

क्या हमारे वाल संग्रह को रखने के लिए हम जिस स्थान का उपयोग कर रहे हैं, उसकी मात्रा को कम करने का कोई तरीका है? कुछ दत्तक ग्रहण संभावनाएँ:

  1. वाल सेगमेंट को किसी भी तरह से रिसाइकिल करने से रोकें, इसलिए यह हर बार शून्य फ़ाइल के साथ शुरू होता है। डॉक्स यह नहीं दर्शाता है कि ऐसा करने के लिए एक विकल्प है, लेकिन मैं इसे याद कर सकता हूं।

  2. जब इसका उपयोग करना शुरू / खत्म हो जाए, तो वील सेगमेंट फ़ाइल को शून्य कर दें। फिर, डॉक्स यह सुझाव नहीं देता है कि यह संभव है।

  3. बाहरी शून्य शून्य या कुछ सेगमेंट फ़ाइलों को हटा दें, जबकि वे उपयोग में नहीं हैं। क्या यह निर्धारित करने का एक सुरक्षित तरीका है कि यह कौन सी फाइल है?

  4. pg_xlogdumpकबाड़ शुरू होने से पहले आउटपुट का उपयोग करने से पहले खंड के अप्रयुक्त हिस्से को शून्य करें जहां से कबाड़ शुरू होता है। संभव है, हालाँकि मुझे यह पसंद नहीं है। कम से कम आर्काइव कमांड में ऐसा करने से आप यह सुनिश्चित कर सकते हैं कि पोस्टग्रेज फ़ाइल का पुन: उपयोग करने वाला नहीं है।

  5. केवल खंड फ़ाइल के उपयोग किए गए भाग को संग्रहीत करें, फिर से pg_xlogdumpकिसी तरह के आउटपुट की व्याख्या करके , और फिर इसे जीरो के साथ पुनर्स्थापित करने के दौरान पैड करें। हालांकि यह संभव लगता है, हालांकि मैं वास्तव में इसे पसंद नहीं करता।


दिलचस्प समस्या है। क्या मैं पूछ सकता हूं कि आप किस निरंतर संग्रह के लिए उपयोग कर रहे हैं?
dezso

@dezso कम मंथन के बावजूद, जहां तक ​​संभव हो इस डेटा को खोने का जोखिम कम करने और किए गए परिवर्तनों का एक ऑडिट ट्रेल होना बहुत महत्वपूर्ण माना जाता है। वाल आर्काइविंग एक अंतिम पंक्ति की रक्षा है (खेलने में अन्य तंत्र भी हैं) इसलिए इसे सस्ता रखना अच्छा होगा।
डेव टर्नर

जवाबों:


5

संस्करण 9.4 में शुरू, यह अब स्वचालित रूप से वाल फाइल के टेल एंड को शून्य करता है। (वास्तव में यह सिर्फ शून्य है, कुछ ब्लॉक हेडर हैं जो शून्य नहीं मिलते हैं, लेकिन फिर भी परिणाम बहुत संकुचित है)।

संस्करण 9.2 में, एक प्रोग्राम है जिसका नाम pg_clearxlogtailआप उपयोग कर सकते हैं। आप इसे संपीड़न चरण से पहले अपने आर्काइव_कमांड में जोड़ सकते हैं।

यदि आप 9.3 का उपयोग कर रहे हैं, तो आप भाग्य से बाहर हैं।

ध्यान दें कि चौकियों में लॉग फ़ाइल स्विच स्वाभाविक रूप से नहीं होते हैं। यह शायद अर्क_ टाइमआउट है जो स्विच का कारण बन रहा है।


डी 'ओह। हां, हम 9.3 पर हैं, इसलिए उन दो समाधानों के बीच दरार से फिसल गए हैं। और हाँ, क्षमा करें, आप सही हैं archive_timeoutकि यह स्विच का कारण बनता है। ओपी को ठीक किया, धन्यवाद।
डेव टर्नर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.