การ zeroing WAL เซกเมนต์ใน Postgres


9

เรามีฐานข้อมูล Postgres ค่อนข้างต่ำพร้อมการจัดเก็บลงสื่อถาวรอย่างต่อเนื่องเพื่อบีบอัดแต่ละส่วน WAL และส่งไปยัง S3 เนื่องจากเป็นระบบที่มีปริมาณน้อยจึงเข้าชมarchive_timeoutทุกๆ 10 นาทีและเก็บถาวรส่วน WAL ที่ไม่ได้ใช้ซึ่งส่วนใหญ่ใช้ในการบีบอัดได้ดีเนื่องจากเป็นศูนย์

อย่างไรก็ตาม Postgres จะรีไซเคิลเซกเมนต์ WAL เพื่อหลีกเลี่ยงค่าใช้จ่ายในการจัดสรรไฟล์ใหม่ที่สวิตช์ WAL แต่ละอันซึ่งมีประโยชน์ในสถานการณ์โหลดสูง แต่ก็หมายความว่าหลังจากเกิดกิจกรรมที่หนักกว่าปกติตอนนี้ไฟล์เซกเมนต์ WAL ของเราเต็มแล้ว ของขยะจากเซ็กเมนต์ก่อนหน้าและไม่บีบอัดได้ดีเลย เรากำลังจัดเก็บสำเนาขยะทั้งหมดนี้จำนวนมาก

มีวิธีใดที่จะลดปริมาณพื้นที่ที่เราใช้ในการเก็บถาวร WAL ของเราหรือไม่ ความเป็นไปได้ย่อยบางอย่าง:

  1. ป้องกัน Postgres จากการรีไซเคิลกลุ่ม WAL อย่างใดดังนั้นจึงเริ่มต้นด้วยไฟล์ zeroed ในแต่ละครั้ง เอกสารไม่ได้ระบุว่ามีตัวเลือกสำหรับการทำเช่นนี้ แต่ฉันอาจพลาดไป

  2. ให้ Postgres เป็นศูนย์ไฟล์ WAL เมื่อมันเริ่มต้น / เสร็จสิ้นการใช้งาน อีกครั้งเอกสารดูเหมือนจะไม่แนะนำว่าเป็นไปได้

  3. เป็นศูนย์ภายนอกหรือลบไฟล์เซกเมนต์ WAL บางส่วนในขณะที่ไม่ได้ใช้งาน มีวิธีที่ปลอดภัยในการระบุไฟล์นี้หรือไม่?

  4. ศูนย์ส่วนที่ไม่ได้ใช้ของเซ็กเมนต์ก่อนเก็บถาวรโดยใช้เอาต์พุตจากpg_xlogdumpเพื่อค้นหาตำแหน่งที่ขยะเริ่มต้น เป็นไปได้แม้ว่าฉันจะไม่ชอบมัน อย่างน้อยที่สุดการทำเช่นนี้ในคำสั่งเก็บถาวรคุณสามารถมั่นใจได้ว่า Postgres จะไม่นำไฟล์นั้นมาใช้ซ้ำ

  5. เก็บเฉพาะส่วนที่ใช้แล้วของไฟล์เซกเมนต์อีกครั้งโดยการตีความเอาต์พุตpg_xlogdumpอย่างใดและจากนั้นรองด้วย zeroes ระหว่างการกู้คืน ฟังดูเป็นไปได้แม้ว่าฉันจะไม่ชอบมัน


ปัญหาที่น่าสนใจ ฉันขอถามได้ว่าคุณกำลังใช้การเก็บถาวรต่อเนื่องหรือไม่
dezso

@dezso แม้จะมีจำนวนน้อย แต่ก็ถือว่าสำคัญมากที่จะลดความเสี่ยงในการสูญเสียข้อมูลใด ๆ เท่าที่จะทำได้และตรวจสอบการเปลี่ยนแปลงที่เกิดขึ้น การเก็บถาวร WAL เป็นบรรทัดสุดท้ายของการป้องกัน (มีกลไกอื่น ๆ ในการเล่นด้วย) ดังนั้นการทำให้มันถูกจะดี
Dave Turner

คำตอบ:


5

เริ่มต้นในเวอร์ชั่น 9.4 ตอนนี้จะเป็นศูนย์โดยอัตโนมัติที่ส่วนท้ายของไฟล์ WAL (อันที่จริงมันเป็นศูนย์ส่วนใหญ่มีบางส่วนหัวบล็อกที่ไม่ได้รับการเป็นศูนย์ แต่ก็ยังผลที่ได้คืออัดได้มาก)

ในรุ่น 9.2 มีโปรแกรมชื่อที่pg_clearxlogtailคุณสามารถใช้ได้ คุณสามารถเพิ่มลงใน archive_command ของคุณก่อนขั้นตอนการบีบอัด

หากคุณใช้ 9.3 คุณโชคไม่ดี

โปรดทราบว่าจุดตรวจไม่ทำให้สวิตช์แฟ้มบันทึกโดยเนื้อแท้ อาจเป็นไฟล์เก็บถาวร _timeout ซึ่งเป็นสาเหตุของสวิตช์


D'โอ้ ใช่เราใช้ 9.3 แล้วดังนั้นลองดูรอยแยกระหว่างโซลูชั่นทั้งสอง และใช่ขอโทษคุณพูดถูกมันเป็นarchive_timeoutสาเหตุของสวิตช์ แก้ไข OP ขอบคุณ
Dave Turner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.