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