क्या मुझे बहुत सी पंक्तियों को हटाने के बाद एक तालिका को पुनः स्थापित करना होगा?


10

मैं एक PostgreSQL डेटाबेस चला रहा हूं जिसमें कई टेबल हैं जो लॉगिंग जानकारी संग्रहीत करते हैं। यह जानकारी केवल रिपोर्टिंग उद्देश्यों के लिए है और 30 दिनों से अधिक पुरानी होने पर फ़ाइल से हटा दी जाती है और डेटाबेस से हटा दी जाती है।

वहाँ लाखों पंक्तियाँ हटाई जा सकती हैं, और हम हर बार हटाने के बाद एक REINDEX चला रहे हैं।

क्या यह पर्याप्त है, या हमें एक VACUUM या VACUUM ANALYZE भी चलना चाहिए? या REINDEX आवश्यक नहीं है और हमें इसके बजाय केवल एक VACUUM या VACUUM ANALYZE चलाना चाहिए ?

हम PostgreSQL 8.2.3 का उपयोग कर रहे हैं, जो मेरा मानना ​​है कि ऑटो-वैक्यूमिंग की अनुमति नहीं देता है।


2
आप विभाजन पर विचार करना चाह सकते हैं, postgresql.org/docs/9.0/static/ddl-partitioning.html देखें ; तो आप बस विभाजन छोड़ सकते हैं और वैक्यूमिंग से बच सकते हैं।
एलेक्स

3
संस्करण 8.2.3 में auto_vacuum है, मैनुअल देखें, लेकिन आपको asap अद्यतन करना चाहिए। वर्तमान 8.2-संस्करण 8.2.17 है। आप सुरक्षा पैच के एक जोड़े सहित 14 पैच पीछे हैं। 8.4 या 9.0 तक उन्नयन एक बेहतर विचार है, auto_vacuum को बेहतर बनाया गया है।
फ्रैंक हाइकेन

जवाबों:


13

आपको एक VACUUM ANALYZE करना चाहिए क्योंकि VACUUM हटाए गए डेटा द्वारा उपयोग किए गए स्थान को पुन: उपयोग करने की अनुमति देगा और लेन-देन रैपपाउंड को रोक देगा, और ANALYZE योजनाकार आँकड़ों को अद्यतन करेगा, जिससे आपके रिपोर्टिंग प्रश्नों के लिए बेहतर क्वेरी योजना बननी चाहिए।

एक REINDEX सैद्धांतिक रूप से आवश्यक नहीं है, लेकिन आप पा सकते हैं कि यह बेहतर प्रदर्शन के परिणामस्वरूप है क्योंकि सूचकांक सन्निहित है।

8.2 के लिए प्रासंगिक प्रलेखन पृष्ठ यहां (रूटीन री-इंडेक्स) और यहां (रूटीन वैक्यूमिंग) हैं

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