वैक्युम फ्रीज बनाम वैकुम फुल


18

क्या कोई व्यक्ति VACUUMPostgreSQL में इन प्रकारों के बीच अंतर बता सकता है ?

मैंने डॉक पढ़ा लेकिन यह सिर्फ कहता है कि FULLटेबल को लॉक करता है और FREEZEट्यूपल्स को "फ्रीज" करता है। मुझे लगता है कि वही है। क्या मै गलत हु?


आपने डॉक पढ़ा है? जो आपने पढ़ा है, उसके लिए एक लिंक शामिल करने का यह एक सही मौका होगा ...
एरविन ब्रान्डेसटेटर

जवाबों:


12

यहाँ संक्षिप्त संक्षिप्त उत्तर है।

वैक्यूम फुल एक एक्सक्लूसिव लॉक निकालता है और टेबल को रीबिल्ड करता है ताकि इसमें कोई खाली ब्लॉक न हो (हम प्रिटिंग फैक्टर को 100% अभी के लिए दिखाते हैं)।

वैक्यूम फ्रीज़ एक तालिका की सामग्री को एक बहुत ही विशेष लेनदेन टाइमस्टैम्प के साथ चिह्नित करता है जो बताता है कि यह कभी भी वैक्यूम होने की आवश्यकता नहीं है। अगली अपडेट यह जमी हुई आईडी गायब हो जाएगी।

उदाहरण के लिए, टेम्प्लेट डेटाबेस डेटाबेस जमे हुए हैं क्योंकि यह कभी नहीं बदलता है (डिफ़ॉल्ट रूप से आप इसे कनेक्ट नहीं कर सकते हैं।)

हर बार अक्सर ऑटोवैक्यूम डेमन एक डेटाबेस और उसके तालिकाओं की जांच करेगा कि यह देखने के लिए कि वैक्यूम करने की आवश्यकता क्या है। यदि एक टेबल वैक्यूम फ्रीज है और फिर कभी अपडेट नहीं किया जाता है, तो ऑटोवैक्मूम डेमन बस इसे पास करेगा। इसके अलावा postgresql में "रैप अराउंड" सुरक्षा कभी भी उस टेबल पर नहीं जाएगी।

tl; dr फ्रीजिंग किसी भी ऑटोवैक रखरखाव की आवश्यकता के रूप में एक तालिका को चिह्नित नहीं करता है। अगला अपडेट इसे अनफ्रेंड कर देगा।


तो, क्या VACUUM FREEZEमेज पर एक विशेष लॉक की आवश्यकता है? ऐसा लगता है, अन्यथा आपको अचानक विश्व स्तर पर सक्रिय लेनदेन से पंक्तियां बनाने का जोखिम उठाना चाहिए। मैं इसे गलत समझ सकता हूं ...
पार्थियन ने

कोई वैक्यूम फ्रीज नहीं करता है, वैक्यूम फुल करता है।
स्कॉट मारलो

6

आगे यह बताने के लिए कि जयदेव ने क्या लिखा।

जिस तरह से Postgres लेन-देन के साथ काम करता है, और दृश्य डेटा का ट्रैक रखने के लिए आंतरिक लेनदेन आईडी की तुलना करता है। हालाँकि, उन लेन-देन के 32-बिट पूर्णांक जल्दी या बाद में वे चारों ओर लपेटेंगे, और इसलिए नया लेनदेन ऐसा लगेगा जैसे यह अतीत में बनाया गया था (और इस तरह वर्तमान लेनदेन में दिखाई दे सकता है), जबकि नहीं पुराने लेन-देन ऐसे दिखेंगे जैसे वे भविष्य में किए जा रहे हैं (और चूंकि भविष्य अभी तक मौजूद नहीं है, इसलिए डेटा कोई भी दिखाई नहीं देगा)।

उस समस्या का मुकाबला करने के लिए पोस्टग्रैज क्या करते हैं, प्रत्येक पंक्ति को असाइन करना है जो इस रैपराउंड से पीड़ित होने के जोखिम के लिए काफी पुरानी है, जो कि हर लेनदेन की तुलना में हमेशा पुराना होता है। आप इसे देख सकते हैं जैसे कि वैध लेनदेन आईडी 0 से 2147483647 तक है, यह सभी मौजूदा पंक्तियों के लिए लेनदेन आईडी को -1 तक सेट कर देगा।

हालांकि, चूंकि वैक्यूम मूल रूप से फिर से उपयोग के लिए खाली स्थान को चिह्नित करने के लिए है, यह केवल उन डेटा पृष्ठों पर काम करता है जिन्हें बदल दिया गया है।

क्या VACUUM FREEZEकरना मूल रूप से सभी पृष्ठों के लिए लेनदेन आईडी फ्रीज है कोई फर्क नहीं पड़ता अगर वे संशोधित किया गया है या नहीं, तो सभी मौजूदा पंक्तियों सभी नए लेन-देन वर्ष के रूप में देखा जाएगा।

हालांकि, संस्करण 8.2 के रूप VACUUM FREEZEमें पदावनत किया गया है और इसका उपयोग नहीं किया जाना चाहिए। इसके बजाय पैरामीटर हैं vacuum_freeze_table_ageऔर autovacuum_freeze_max_ageयह निर्दिष्ट करता है कि टेबल पर एक पूर्ण स्कैन होने से पहले कितने लेनदेन हो सकते हैं (प्रभावी रूप VACUUM FREEZEसे मेज पर आंतरिक रूप से करते हैं)।


3
यह कैसे होता है कि डॉक्स का उल्लेख VACUUM FREEZE/ हतोत्साहित नहीं किया जाता है?
dezso

दिलचस्प। यह 8.2 और 9.0 के बीच संस्करणों के लिए किया था। शायद उन्होंने पदावनति को हटा दिया क्योंकि यह एक अच्छी सुविधा हो सकती है।
जिमी स्टेनके

1

जब मैंने एक ही प्रश्न पूछा तो उत्तर से कॉपी / पेस्ट करें - "नियमित वैक्यूम रि-यूज़ के लिए खाली जगह को चिन्हित करता है, और रिलेशन के अंत में खाली जगह को पुनः प्राप्त करता है। इसलिए यदि खाली जगह बीच में है आदि तो यह नहीं हो सकता है। पुन: उपयोग किया गया।

निर्वात पूर्ण रिक्त सभी रिक्त स्थान को पुनः प्राप्त करने वाला एक संबंध है। इसके लिए एक विशेष लॉक की आवश्यकता होती है और यह सामान्य रूप से उत्पादन प्रणालियों के लिए खराब है।

तो REGULAR वैक्यूम का उद्देश्य तालिकाओं से स्थान को पुनः प्राप्त करना नहीं है, बल्कि बाद में पुन: उपयोग के लिए उपलब्ध कराना है। वैक्यूम फुल का उद्देश्य एक विशेष लॉक और डीबी प्रदर्शन की कीमत पर सभी बर्बाद हुए स्थान को पुनः प्राप्त करना है, जबकि ऐसा हो रहा है।

इसलिए, चूंकि नियमित वैक्यूम को सब कुछ प्राप्त करने के लिए डिज़ाइन नहीं किया गया है, इसलिए आपको आश्चर्यचकित नहीं होना चाहिए कि यह वास्तव में, सब कुछ पुनः प्राप्त नहीं करता है। नियमित और पूर्ण वैक्यूम के बीच अंतर देखने के लिए अधिक यादृच्छिक विलोपन के साथ बड़े डेटासेट पर अपने प्रयोग की कोशिश करें। "

http://postgresql.1045698.n5.nabble.com/vacuuming-doubt-td5782828.html

इसे जोड़ने के लिए, वैक्यूम फुल वास्तव में टेबल के लिए नई फाइलें बनाएगा (मौजूदा फाइलें 0 आकार तक सिकुड़ जाएंगी)। इस प्रकार ओएस अंतरिक्ष को पुनः प्राप्त कर सकता है।


2
प्रश्न VACUUM FREEZEविशेष रूप से पूछता है ।
इरविन ब्रान्डेसटेटर

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