क्या कोई व्यक्ति VACUUM
PostgreSQL में इन प्रकारों के बीच अंतर बता सकता है ?
मैंने डॉक पढ़ा लेकिन यह सिर्फ कहता है कि FULL
टेबल को लॉक करता है और FREEZE
ट्यूपल्स को "फ्रीज" करता है। मुझे लगता है कि वही है। क्या मै गलत हु?
क्या कोई व्यक्ति VACUUM
PostgreSQL में इन प्रकारों के बीच अंतर बता सकता है ?
मैंने डॉक पढ़ा लेकिन यह सिर्फ कहता है कि FULL
टेबल को लॉक करता है और FREEZE
ट्यूपल्स को "फ्रीज" करता है। मुझे लगता है कि वही है। क्या मै गलत हु?
जवाबों:
यहाँ संक्षिप्त संक्षिप्त उत्तर है।
वैक्यूम फुल एक एक्सक्लूसिव लॉक निकालता है और टेबल को रीबिल्ड करता है ताकि इसमें कोई खाली ब्लॉक न हो (हम प्रिटिंग फैक्टर को 100% अभी के लिए दिखाते हैं)।
वैक्यूम फ्रीज़ एक तालिका की सामग्री को एक बहुत ही विशेष लेनदेन टाइमस्टैम्प के साथ चिह्नित करता है जो बताता है कि यह कभी भी वैक्यूम होने की आवश्यकता नहीं है। अगली अपडेट यह जमी हुई आईडी गायब हो जाएगी।
उदाहरण के लिए, टेम्प्लेट डेटाबेस डेटाबेस जमे हुए हैं क्योंकि यह कभी नहीं बदलता है (डिफ़ॉल्ट रूप से आप इसे कनेक्ट नहीं कर सकते हैं।)
हर बार अक्सर ऑटोवैक्यूम डेमन एक डेटाबेस और उसके तालिकाओं की जांच करेगा कि यह देखने के लिए कि वैक्यूम करने की आवश्यकता क्या है। यदि एक टेबल वैक्यूम फ्रीज है और फिर कभी अपडेट नहीं किया जाता है, तो ऑटोवैक्मूम डेमन बस इसे पास करेगा। इसके अलावा postgresql में "रैप अराउंड" सुरक्षा कभी भी उस टेबल पर नहीं जाएगी।
tl; dr फ्रीजिंग किसी भी ऑटोवैक रखरखाव की आवश्यकता के रूप में एक तालिका को चिह्नित नहीं करता है। अगला अपडेट इसे अनफ्रेंड कर देगा।
VACUUM FREEZE
मेज पर एक विशेष लॉक की आवश्यकता है? ऐसा लगता है, अन्यथा आपको अचानक विश्व स्तर पर सक्रिय लेनदेन से पंक्तियां बनाने का जोखिम उठाना चाहिए। मैं इसे गलत समझ सकता हूं ...
आगे यह बताने के लिए कि जयदेव ने क्या लिखा।
जिस तरह से Postgres लेन-देन के साथ काम करता है, और दृश्य डेटा का ट्रैक रखने के लिए आंतरिक लेनदेन आईडी की तुलना करता है। हालाँकि, उन लेन-देन के 32-बिट पूर्णांक जल्दी या बाद में वे चारों ओर लपेटेंगे, और इसलिए नया लेनदेन ऐसा लगेगा जैसे यह अतीत में बनाया गया था (और इस तरह वर्तमान लेनदेन में दिखाई दे सकता है), जबकि नहीं पुराने लेन-देन ऐसे दिखेंगे जैसे वे भविष्य में किए जा रहे हैं (और चूंकि भविष्य अभी तक मौजूद नहीं है, इसलिए डेटा कोई भी दिखाई नहीं देगा)।
उस समस्या का मुकाबला करने के लिए पोस्टग्रैज क्या करते हैं, प्रत्येक पंक्ति को असाइन करना है जो इस रैपराउंड से पीड़ित होने के जोखिम के लिए काफी पुरानी है, जो कि हर लेनदेन की तुलना में हमेशा पुराना होता है। आप इसे देख सकते हैं जैसे कि वैध लेनदेन आईडी 0 से 2147483647 तक है, यह सभी मौजूदा पंक्तियों के लिए लेनदेन आईडी को -1 तक सेट कर देगा।
हालांकि, चूंकि वैक्यूम मूल रूप से फिर से उपयोग के लिए खाली स्थान को चिह्नित करने के लिए है, यह केवल उन डेटा पृष्ठों पर काम करता है जिन्हें बदल दिया गया है।
क्या VACUUM FREEZE
करना मूल रूप से सभी पृष्ठों के लिए लेनदेन आईडी फ्रीज है कोई फर्क नहीं पड़ता अगर वे संशोधित किया गया है या नहीं, तो सभी मौजूदा पंक्तियों सभी नए लेन-देन वर्ष के रूप में देखा जाएगा।
हालांकि, संस्करण 8.2 के रूप VACUUM FREEZE
में पदावनत किया गया है और इसका उपयोग नहीं किया जाना चाहिए। इसके बजाय पैरामीटर हैं vacuum_freeze_table_age
और autovacuum_freeze_max_age
यह निर्दिष्ट करता है कि टेबल पर एक पूर्ण स्कैन होने से पहले कितने लेनदेन हो सकते हैं (प्रभावी रूप VACUUM FREEZE
से मेज पर आंतरिक रूप से करते हैं)।
VACUUM FREEZE
/ हतोत्साहित नहीं किया जाता है?
जब मैंने एक ही प्रश्न पूछा तो उत्तर से कॉपी / पेस्ट करें - "नियमित वैक्यूम रि-यूज़ के लिए खाली जगह को चिन्हित करता है, और रिलेशन के अंत में खाली जगह को पुनः प्राप्त करता है। इसलिए यदि खाली जगह बीच में है आदि तो यह नहीं हो सकता है। पुन: उपयोग किया गया।
निर्वात पूर्ण रिक्त सभी रिक्त स्थान को पुनः प्राप्त करने वाला एक संबंध है। इसके लिए एक विशेष लॉक की आवश्यकता होती है और यह सामान्य रूप से उत्पादन प्रणालियों के लिए खराब है।
तो REGULAR वैक्यूम का उद्देश्य तालिकाओं से स्थान को पुनः प्राप्त करना नहीं है, बल्कि बाद में पुन: उपयोग के लिए उपलब्ध कराना है। वैक्यूम फुल का उद्देश्य एक विशेष लॉक और डीबी प्रदर्शन की कीमत पर सभी बर्बाद हुए स्थान को पुनः प्राप्त करना है, जबकि ऐसा हो रहा है।
इसलिए, चूंकि नियमित वैक्यूम को सब कुछ प्राप्त करने के लिए डिज़ाइन नहीं किया गया है, इसलिए आपको आश्चर्यचकित नहीं होना चाहिए कि यह वास्तव में, सब कुछ पुनः प्राप्त नहीं करता है। नियमित और पूर्ण वैक्यूम के बीच अंतर देखने के लिए अधिक यादृच्छिक विलोपन के साथ बड़े डेटासेट पर अपने प्रयोग की कोशिश करें। "
http://postgresql.1045698.n5.nabble.com/vacuuming-doubt-td5782828.html
इसे जोड़ने के लिए, वैक्यूम फुल वास्तव में टेबल के लिए नई फाइलें बनाएगा (मौजूदा फाइलें 0 आकार तक सिकुड़ जाएंगी)। इस प्रकार ओएस अंतरिक्ष को पुनः प्राप्त कर सकता है।
VACUUM FREEZE
विशेष रूप से पूछता है ।