Postgres'te WAL segmentlerini sıfırlama


9

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:

  1. 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.

  2. 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.

  3. 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ı?

  4. 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.

  5. 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.


İlginç bir sorun. Hangi sürekli arşivlemeyi kullandığınızı sorabilir miyim?
dezso

@dezso Düşük karmaşaya rağmen, bu verilerin herhangi birini kaybetme riskini azaltmak ve yapılan değişikliklerin denetim izini almak çok önemli olarak kabul edilir. WAL arşivlemesi bir savunma hattıdır (oyunda başka mekanizmalar da vardır), bu yüzden ucuz tutmak iyi olurdu.
Dave Turner

Yanıtlar:


5

Sürüm 9.4'ten başlayarak, artık otomatik olarak WAL dosyasının kuyruk ucunu sıfırlar. (Aslında sadece sıfırdır, sıfırlanmayan bazı blok başlıkları vardır, ancak yine de sonuç çok sıkıştırılabilir).

9.2 sürümünde pg_clearxlogtail, kullanabileceğiniz adlı bir program vardır . Sıkıştırma adımından önce arşiv_komutunuza ekleyebilirsiniz.

9.3 kullanıyorsanız şansınız kalmaz.

Denetim noktalarının kendiliğinden günlük dosyası anahtarlarına neden olmadığını unutmayın. Muhtemelen anahtarlara neden olan archive_timeout şeklindedir.


D'oh. Evet, 9.3'teyiz, bu yüzden bu iki çözüm arasındaki çatlaktan geçtik. Ve evet, üzgünüm, haklısın archive_timeoutanahtarların nedeni bu. OP düzeltildi, teşekkürler.
Dave Turner
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.