Her bir WAL segmentini sıkıştırmak ve S3'e göndermek için sürekli arşivleme ayarlanmış nispeten düşük hacimli bir Postgres veritabanımız var. Bu düşük hacimli bir sistem için, bir isabet archive_timeouther 10 dakika kadar ve arşivleri çok-kullanılmayan WAL segmenti için kullanılan çoğunlukla sadece sıfır olduğu çok iyi sıkıştırmak.
Bununla birlikte, Postgres, her bir WAL anahtarına yeni dosyalar tahsis etmenin maliyetinden kaçınmak için WAL segmentlerini geri dönüştürür, bu da yüksek yük durumunda faydalıdır, ancak normalden daha ağır bir etkinlik patlamasından sonra WAL segment dosyalarımızın artık dolu olduğu anlamına gelir önceki segmentlerden gelen önemsiz ve çok iyi sıkıştırmayın. Tüm bu çöplerin bir sürü kopyasını saklıyoruz.
WAL arşivimizi tutmak için kullandığımız alan miktarını azaltmanın bir yolu var mı? Bazı yetersiz olasılıklar:
Postgres'ın WAL segmentlerini bir şekilde geri dönüştürmesini engelleyin, böylece her seferinde sıfırlanmış bir dosyayla başlar. Dokümanlar bunu yapmak için bir seçenek olduğunu göstermiyor, ancak kaçırmış olabilirim.
Postgres'i WAL segment dosyasını kullanmaya başladığında / bitirdiğinde sıfırlayın. Yine, dokümanlar bunun mümkün olduğunu düşündürmüyor.
WAL segment dosyalarını kullanımda değilken harici olarak sıfırlayın veya kaldırın. Bunun hangi dosyalar olduğunu belirlemenin güvenli bir yolu var mı?
pg_xlogdumpİstenmeyen parçanın nereden başlayacağını bulmak için çıkışını kullanarak segmenti kullanmadan önce segmentin kullanılmayan kısmını sıfırlayın. Mümkün olmasa da mümkün. En azından bunu arşiv komutunda yaparak Postgres'in dosyayı yeniden kullanmayacağından emin olabilirsiniz.Segment dosyasının kullanılmış kısmını sadece bir
pg_xlogdumpşekilde çıktısını yorumlayarak arşivleyin ve geri yükleme sırasında sıfırlarla doldurun. Ben gerçekten fantezi olmasa da mümkün görünüyor.