2008-09-01 8 views
7

मैं एक गर्म-स्टैंडबाय डेटाबेस बनाने के लिए PostgreSQL में Write Ahead Logs (WAL) के लॉग-शिपिंग पर विचार कर रहा हूं। हालांकि मेरे पास डेटाबेस में एक टेबल है जो प्रत्येक दिन INSERT/DELETEs की एक बड़ी राशि प्राप्त करती है, लेकिन मुझे इसमें डेटा की सुरक्षा करने की परवाह नहीं है। उत्पादित वाल की मात्रा को कम करने के लिए मैं सोच रहा था, क्या एक मेज पर किसी भी गतिविधि को डब्ल्यूएएल में दर्ज होने से रोकने का कोई तरीका है?PostgreSQL में केवल एक तालिका पर आगे लिखने को रोकने के लिए कैसे?

उत्तर

4

दुर्भाग्यवश, मुझे विश्वास नहीं है कि वहां है। वाल लॉगिंग पृष्ठ स्तर पर चलती है, जो तालिका स्तर से काफी कम है और यह भी नहीं जानता कि कौन सा पृष्ठ किस तालिका से डेटा रखता है। वास्तव में, वाल फाइलें यह भी नहीं जानती कि कौन से पृष्ठ डेटाबेस हैं।

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

0

अपने स्वयं के प्रश्न के लिए एक विकल्प प्रदान करने के लिए। temp tables हैं - "सत्र के अंत में अस्थायी तालिकाओं को स्वचालित रूप से गिरा दिया जाता है, या वैकल्पिक लेनदेन के अंत में वैकल्पिक रूप से नीचे (नीचे COMMIT देखें)" - जो मुझे लगता है कि WAL उत्पन्न नहीं करता है। फिर भी, यह आदर्श नहीं हो सकता है क्योंकि टेबल निर्माण & डिज़ाइन कोड में होना होगा।

+1

टेम्पलेट टेबल सिस्टम कैटलॉग अपडेट (pg_class) के लिए WAL प्रविष्टियां उत्पन्न करेंगे, भले ही वे डेटा अपडेट के लिए नहीं हैं (मुझे यकीन नहीं है)। आप व्यस्त टेबल को कहीं और स्थानांतरित कर सकते हैं और इसे एक्सेस करने के लिए dblink इंटरफ़ेस का उपयोग कर सकते हैं या स्लोनी जैसी तालिका-आधारित प्रतिकृति प्रणाली पर स्विच कर सकते हैं। – mjy

-4

मैं इस तरह के मामलों के लिए memcached पर विचार करता हूं। आप भी सस्ते मशीनों के एक गुच्छा पर लोड फैल सकते हैं।

8

इस पुराने प्रश्न के पार, अब अब एक बेहतर जवाब है। पोस्टग्रेज 9.1 ने "अनलॉगेड टेबल्स" पेश किया, जो वे टेबल हैं जो डब्लूएलएल में अपने डीएमएल परिवर्तनों को लॉग नहीं करते हैं। अधिक जानकारी के लिए दस्तावेज़ देखें, लेकिन कम से कम अब इस समस्या का समाधान है।

Waiting for 9.1 - UNLOGGED tables depesz द्वारा देखें, और 9.1 docs

+0

9.1 से पहले संस्करणों में, यदि आप आवेषण करने से पहले तालिका को 'छोटा कर देते हैं', तो वे प्रविष्टियां WAL लॉग इन नहीं हैं। –

+0

मेरा मानना ​​है कि यह केवल तभी सच है जब आप एक ही लेनदेन के भीतर छंटनी/डालें, लेकिन अधिक महत्वपूर्ण रूप से गर्म स्टैंडबाय के साथ मामले पर लागू नहीं है, जहां अन्य सर्वर पर भेजने के लिए अभी भी डेटा को WAL स्ट्रीम में जाना है । – xzilla

+0

आप लेनदेन के बारे में सही हैं (मैंने सोचा था कि स्वयं स्पष्ट था;)) यद्यपि गर्म-स्टैंडबाय के बारे में अच्छा बिंदु। –

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