<p>- Heap, analiz amaçlı çoklu petabayt ölçeğinde Postgres işletiyor<br />
- Hızla büyürken düğüm kullanım oranı %80'i aştı ve veri toplama pipeline'ında performans sorunları ortaya çıktı <br />
- Sorunun nedeni, SSD'lerin kullanım oranı %100'e yaklaştığında performanslarının düşme eğilimi göstermesi<br />
- CoW (Copy-on-Write) olan ZFS kullanılması nedeniyle sorun daha da kötüleşti <br />
→ blok her güncellendiğinde yeni bir kopya yazılıyor <br />
- Elbette CoW'un çeşitli avantajları da var<br />
→ dosya sistemi düzeyindeki sıkıştırma, diğer dosya sistemlerine kıyasla daha kolay olduğu için 4-5x sıkıştırma ile alandan tasarruf sağlıyor <br />
→ daha yüksek dayanıklılık sunduğu için Postgres'in `full_page_writes` ayarını devre dışı bırakmak mümkün oluyor; bu da performansı artırıp toplam IO'yu azaltıyor <br />
→ tutarlılığı garanti eden point-in-time snapshot'lar - sayfalar fiilen değiştirilemediği için snapshot sırasında da eski sayfalar korunuyor<br />
- Ancak ZFS gibi CoW dosya sistemlerinde kapasite doldukça performans düşüyor<br />
→ her sayfa güncellemesinde blok allocator'ın boş blok bulması gerektiğinden, kullanım oranı yükseldikçe performans kaybı ciddi hale geliyor <br />
→ daha önce unlink edilmiş blokların silinmesi ve mevcut bloklarla karıştırılması gerekiyor <br />
→ daha yüksek sıkıştırma oranı elde etmek için blok boyutunun 64kb olarak büyük ayarlanmış olması durumu daha da kötüleştirdi <br />
→ bu nedenlerle ZFS kullanım oranının %80'i aşmaması öneriliyor <br />
<br />
- ZFS 2.x'e yükseltilip `lz4` sıkıştırmadan Zstandard sıkıştırmaya geçiş denenmiş <br />
→ `lz4` son derece hızlı ve yaklaşık 4.4x sıkıştırma oranı sunuyor <br />
→ Zstandard ise yaklaşık 5.5x'e kadar sıkıştırma oranı göstererek %20 iyileşme sağlıyor <br />
→ ancak birçok benchmark'ta Zstandard'ın `lz4`'ten daha yavaş olduğu görülüyor<br />
→ bu yüzden gerçek ortamda sıkı testler yapmaya karar verilmiş <br />
→ test sonuçlarında sorgu performansı değişmezken depolama kullanımı yaklaşık %20 azalmış ve yazma sorgularının süresi yarıya inmiş <br />
<br />
- Heap'in DB kümesi 5 düğüme ayrılmış durumda ve her biri kendi ASG'sine bağlı <br />
→ düğüm değiştirmek için yalnızca ASG'den ayırmak yeterli; ardından ASG yeni bir düğüm oluşturuyor, son yedekten geri yüklüyor ve warm standby moduna geçiyor <br />
→ yeni yapılandırmayla bir AMI oluşturulup her düğüm tek tek geçirilmiş <br />
→ toplam kullanım yaklaşık %21 azaldı, yazma süresi %50 düştü ve sorgu performansında kayda değer bir fark olmadı </p>
1 yorum