Ürünlerimiz Çözümlerimiz İletişim EN

PostgreSQL Write-Ahead Logging (WAL) Mekanizması

Write-Ahead Logging (WAL) veri bütünlüğünü sağlamak için kullanılan standart bir yöntemdir.

 

WAL’a göre;

 
“Veri dosyalarında tabloların ve dizinlerin bulunduğu yerlerdeki değişikliklerin yazılabilmesi (write) için, öncelikle bu değişikliklerin kaydedilmesi, yani değişiklikleri tanımlayan günlük kayıtların (log) kalıcı depolamaya alınması gerekir.”
 

Bu prosedürü takip edersek, her işlemde veri sayfalarını diske atmamız gerekmez, çünkü bir çökme durumunda veritabanını günlüğü kullanarak kurtarabiliriz.

 

Varsayılan olarak wal_level = minimal olarak gelir, PITR (Point In Time Recovery) işlemine imkan verecek kadar log tutulmaz.

 
vim /var/lib/pgsql/9.6/data/postgresql.conf
wal_level = archive
 

Diğer ayarların aksine, bu değişiklik yeniden başlatmayı (restart) gerektirir.

 
systemctl restart postgresql-9.6
 

Performans sorunları için max_wal_size ve min_wal_size ayarları değiştirilebilir. Bir süre çalıştıktan sonra, log’lar takip edilerek bu ayarlar optimize edilebilir.

 

PostgreSQL’in kendi sitesinden öneriler

* Veritabanınızın yazma trafiğinin “aralıklı” olduğunu biliyorsanız, uzun süre kullanılmadıktan sonraki yoğun yazmaların ardından, min_wal_size’ı artırın.

 

* 1 GB’den büyük bulk load yapacaksanız, max_wal_size’i bulk load boyutuna yükseltin.

 

* Her 10 dakikada bir 1GB’den fazla veri yazacaksanız, max_wal_size’ı artırın.

 

* Eğer “Checkpoints occurring too frequently” hata mesajı alıyorsanız, her iki parametreyi de adım adım artırmayı deneyin.

 

Her iki değeri de varsayılanın 3 katına çıkarmak için şöyle bir değişiklik yapılabilir:

 
vim /var/lib/pgsql/9.6/data/postgresql.conf
max_wal_size = 3GB
min_wal_size = 240MB
 

Varsayılan olarak eski WAL’lar tutulmaz. Yedekleme istiyorsanız, aşağıdaki şekilde ayarı değiştirebilirsiniz:

 
wal_keep_segments = 10
 

postgresql.conf’ta da max_wal_senders’ı 1 yapalım:

 

vim /var/lib/pgsql/9.6/data/postgresql.conf
max_wal_senders = 1
 

Yedekleme (Backup alma)

 
$ sudo -u postgres pg_basebackup — xlog — format=plain -D /var/lib/pgsql/9.6/backups/`date +%Y%m%d`
 

Bu işlemi cron’a koyarak, belirli sıklıklarla yedekleme yapmasını sağlayabilirsiniz.

 

Arşivleme

 

Eski yedeklere dönmek için base backup’ların yanısıra eski WAL’ların da elde olması gerektiği için, böyle birşey isteniyorsa archive_mode = on ve archive_command belirterek arşivleme yapılmalıdır.

 

Gerektiği zaman backup’ın üzerine pg_xlog’daki WAL log’larını oynatarak tarih bazlı yedekler üretebiliriz.

 
vim /var/lib/pgsql/9.6/data/postgresql.conf
archive_mode = on archive_command = ‘test ! -f /mnt/nasdb1/pgdata/WAL_Archive/%f && cp %p /mnt/WAL’s/%f’
 

Yazan: Kaan Kahraman

Yayınlanma Tarihi: 14.05.2019  
%d blogcu bunu beğendi: