PostgreSQL’de WAL Boyutunu Değiştirme

Rıdvan Korkmaz

PostgreSQL veritabanında veritabanı değişikliklerinin yazıldığı dosyalara WAL (Write Ahead Log) ismi verilir. Birçok veritabanında farklı adlarda da olsa aynı yapı bulunmaktadır. Veritabanında yazma yükü fazla ise WAL dosyaları çok sık olarak yeni dosyaya geçmektedir (WAL Switch). Bu durum veritabanı performansına olumsuz etki yapar.

PostgreSQL veritabanında WAL dosya büyüklükleri varsayılan olarak 16M olarak tanımlanmıştır. Bu günümüz iş yüklerini dikkate aldığımızda hayli küçük kalmaktadır. Bu yazıda WAL dosya boyutlarını nasıl değiştirebileceğimizden bahsedeceğiz.

Eğer hiçbir parametre vermeden veritabanı oluşturursak WAL dosyaları için 16M olarak varsayılan boyut verilir. Fakat istersek WAL boyutunu belirleyebiliriz. Komut satırında verilecek boyut MB cinsinden belirtilebilir ve 2 üzeri 0-10 arası değer verilebilir. Verilebilecek segment boyutları şunlardır: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 ve 1024.

 

Veritabanını başlattıktan sonra WAL boyutunu görebiliriz.

Şimdi var olan veritabanında WAL büyütmesini nasıl yapabileceğimize bakalım. WAL dosyalarında veri değişiklikleri bulunduğu için, dosyaların bozulması verilerin kaybolmasına neden olur. Bu yüzden WAL dosyaları çok önemlidir. WAL dosyalarının boyutunu büyütebilmek için PostgreSQL kurulumu ile gelen pg_resetwal uygulamasını kullanacağız. Bu uygulama mevcut WAL dosyalarını siler ve istediğimiz boyutta yeni bir WAL dosyası oluşturur. Oracle ortamlarına aşina olan DBA’larin RESET LOGS ile veritabanı açmasına eşdeğerdir. pg_resetwal kullanılmadan önce veritabanının temiz olarak kapatılmış olması büyük önem arz etmektedir. Eğer WAL’larda hala datafile’lara yazılmamız veriler bulunuyorsa (checkpoint tamamlanmamışsa) veritabanı artık açılmaz, veriler bozulur. Dolayısıyla pg_resetwal yapmadan önce, garanti tarafta kalmak açısından veritabanı uzak bağlantıya kapatılıp (listen_address = ‘localhost’ ile), en az iki defa kapatıp açılmasını tavsiye ediyorum.
Gerekli açıklamalardan ve alınmış tedbirlerden sonra, aşağıdaki gibi, WAL dosya boyutlarını istediğimiz gibi ayarlayabiliriz. Örnekte 1GB yapıyoruz.

 

Veritabanını açalım:

 

Veritabanı açılırken bir hata ile kapandı, log kayıtlarının açıkladığı gibi, min_wal_size parametresinin değeri (varsayılan 80MB) ayarlanan wal_segment_size değerinin en az 2 katı olması gerekiyor. Buna ek olarak max_wal_size (varsayılan 1GB) parametresi de checkpoint’leri etkilediğinden en az 4 WAL size kadar olmasını tavsiye ediyorum.
Tüm durumlar için aşağıdaki parametreleri postgresql.conf dosyasına yazmalıyız:

 

Veritabanını başlatıp, yeni WAL boyutunu görebiliriz.

Gerçek ortamlarda bu işlemin yapılması kesinti gerektireceğinden planlı çalışma kapsamında yapılmalıdır.

Referanslar: pgresetwal

Yorum yapın