अब, मैंने "लेन-देन आईडी रैपराउंड" के बारे में दस्तावेज़ पढ़ा है, लेकिन कुछ चीजें हैं जो मुझे वास्तव में समझ में नहीं आती हैं, दस्तावेज़ निम्नलिखित url है http://www.postgresql.org/docs/9.0/static/routine.acacuuming .html # वैक्यूम के लिए-wraparound
23.1.4। लेन-देन की रोकथाम आईडी रैपराउंड की विफलता
PostgreSQL के MVCC लेन-देन शब्दार्थक लेनदेन आईडी (XID) संख्याओं की तुलना करने में सक्षम होने पर निर्भर करते हैं: वर्तमान लेनदेन के XID से अधिक प्रविष्टि XID के साथ एक पंक्ति संस्करण "भविष्य में" है और वर्तमान लेनदेन के लिए दृश्यमान नहीं होना चाहिए। लेकिन चूंकि लेन-देन आईडी में सीमित आकार (32 बिट्स) होता है, एक क्लस्टर जो लंबे समय तक चलता है (4 बिलियन से अधिक लेनदेन) लेनदेन आईडी रैपराउंड को भुगतना होगा: XID काउंटर शून्य के आसपास घूमता है, और अचानक लेनदेन जो सभी में थे अतीत भविष्य में प्रकट होता है - जिसका अर्थ है कि उनका उत्पादन अदृश्य हो जाता है। संक्षेप में, विपत्तिपूर्ण डेटा हानि। (वास्तव में डेटा अभी भी है, लेकिन अगर आप इसे प्राप्त नहीं कर सकते हैं तो यह ठंडा आराम है।) इससे बचने के लिए, हर डेटाबेस में हर दो बिलियन लेनदेन के बाद कम से कम एक बार प्रत्येक तालिका को वैक्यूम करना आवश्यक है।
मुझे समझ में नहीं आता है कि "लेन-देन आईडी रैपअराउंड को भुगतना होगा: XID काउंटर शून्य के आसपास घूमता है, और अतीत में अचानक हुए सभी लेनदेन भविष्य में दिखाई देते हैं - जिसका अर्थ है कि उनका आउटपुट अदृश्य हो गया है"
क्या कोई इसे समझा सकता है? क्यों डेटाबेस के बाद लेन-देन आईडी रैपराउंड से पीड़ित होता है जो अतीत में थे लेनदेन भविष्य में दिखाई देते हैं? संक्षेप में, मैं यह जानना चाहता हूं कि क्या ऑटोरेवोयूम द्वारा लेन-देन आईडी रैपराउंड के बाद "डेटा हानि" स्थिति में PostgreSQL होगा to
मेरे निजी विचारों के लिए, हम txid_current () फ़ंक्शन का उपयोग करके वर्तमान लेन-देन आईडी प्राप्त कर सकते हैं, जिसका आउटपुट 64 बिट है और इसे साइकल नहीं किया जाएगा। तो मुझे लगता है कि tuples का सम्मिलन लेनदेन आईडी, जो xmin के रूप में जानता है, जो xid से अधिक प्राप्त करेगा txid_current () फ़ंक्शन द्वारा। सिवाय इसके कि आप PostgreSQL सर्वर बंद करने के बाद pg_resetxlog रीसेट रीसेट ID का उपयोग करेंगे। क्या मैं सही हू ? धन्यवाद