Düzeltme Öner

Veritabanı Servisinde İyileştirme

Vacuum

  • Veritabanında kullanılmayan kayıtları temizleyerek veritabanı boyutunu küçültür.
  • Tüm PostgeSQL sistemleri için mutlaka gerekli.
  • PostgreSQL öntanımlı otomatik vakumlama yapıyor (autovacuum).
  • Vacuum Full: Tüm tabloyu sıfırdan baştan oluşturur.
  • Vacuum Freeze: Tablonun otomatik vakumlanmamasını sağlar.

Elle Vakumlamak

  • Otomatik vakumlama istenmeyen zamanlarda I/O yaratıyor
  • Sistemin kullanılmadığı saatler var
  • Otomatik vakumlama kapatalıp, o saatler için cron’dan vakum tetiklenebilir.

Otomatik Vakumlamayı Ehlileştirmek

  • Hemen her vakumlama sorunu, daha sık vakumlayarak çözümlenebilir:
    • autovacuum_vacuum_cost_limit = -1
    • autovacuum_vacuum_cost_delay = 20
    • autovacuum_vacuum_threshold = 50
    • autovacuum_vacuum_scale_factor = 0.2
    • autovacuum_analyze_threshold + autovacuum_analyze_scale_factor
    • Tüm autovacuum_* parametreleri her tablo için ayrı ayrı düzenlenebiliyor.

Tam Vakumlamak

  • Düzenli Vacuum Full çalıştırmak gereksiz
  • Düzenli vakumlanan tablolar için hiç gerekmemeli
  • Tablo kitlediği için servis kesintisine yol açar
  • Sadece düzenli vakumlanmadığı için tablo satırlarının çoğu öldüyse anlamlı.

Veritabanı Parametrelerini Düzenleme

Bellek Öncelikli Parametreler

  • PostgreSQL’ın öntanımlı değerleri genel olarak yeterli
  • max_connections
  • shared_buffers: RAM * 1/4
  • work_mem
  • maintenance_work_mem
  • effective_cache_size: RAM * 3/4

I/O Öncelikli Parametreler

  • wal_buffers
  • checkpoint_segments: 10 (en az)
  • checkpoint_completion_target: 0.9