सीधे अपने प्रश्न का उत्तर देने के लिए, न्यूनतम क्यों और अधिकतम क्यों नहीं? क्योंकि नए WAL खंड RemoveOldXlogFiles(_logSegNo, recptr)
की तुलना में तेज़ी से बढ़ सकते हैं फ़ंक्शन पुराने को हटा सकता है।
साथ ही, दस्तावेज़ों में WAL खंडों की संभावित संख्या की गणना करने का सूत्र गलत है। मेरे पास checkpoint_segments + wal_keep_segments + 1
की तुलना में हमेशा कुछ अधिक WAL होते हैं एक अधिक सटीक सूत्र यह है:wal_keep_segments + 2 * checkpoint_segments + 1
इस पर एक पुरानी, लेकिन वास्तव में अच्छी पोस्ट है:http://www.postgresql.org/message-id/[email protected]
यदि आप बड़े पैमाने पर सम्मिलित करते हैं, तो आपके WAL खंड निकाले जाने की तुलना में तेज़ी से बढ़ेंगे। यह मुझे इस सप्ताह ही मिला है। मुझे उम्मीद थी कि pg_xlog अपेक्षाकृत स्थिर आकार बनाए रखेगा। रात में एक बड़ी प्रक्रिया चल रही थी और जब मुझे अगली सुबह काम करना पड़ा, तो मेरा पोस्टग्रेज इंस्टेंस क्रैश हो गया क्योंकि उन वाल को बंद करने के लिए मैंने जो वॉल्यूम लगाया था वह पूरी तरह से भरा हुआ था। पोस्टग्रेज ने वॉल्यूम भर दिया, और भी वाल लिखने की कोशिश की, नहीं कर सका, और अचानक मर गया। सौभाग्य से हम प्रतिकृतियां pgpool2 के पीछे चलाते हैं।
यदि आपके पास जिज्ञासु मन है, तो मैं आपको पोस्टग्रेज सोर्स कोड ब्राउज़ करने के लिए प्रोत्साहित करता हूं। यह विशाल और सी में है, लेकिन कोड टिप्पणियां वास्तव में मदद करती हैं। यह फ़ाइल विशेष रूप से ज्ञानवर्धक है क्योंकि यह चेकपॉइंटिंग कैसे काम करती है और पुराने वाल सेगमेंट को कैसे हटाती है, इसके नट और बोल्ट में आती है:https://github.com/postgres/postgres/blob/master/src/backend/access/transam/xlog.c