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’

Benzer Yazılar
Öne Çıkan Yazılar

Yeni Başlayanlar için Android Kütüphanesi Oluşturma ve Bintray ile Yayınlama
Şub 8, 2019 | Açık Kaynak
SELinux Nedir? Varsayılan Güvenlik Politikasına Uymayan Durumlara Nasıl İzin Verilir?
Ağu 6, 2013 | Açık Kaynak
Değişen Dünyanın Dili: VUCA ve BANI
Haz 28, 2022 | Dijital Pazarlama
Çevik ve Scrum
Ara 31, 2021 | Çevik Metodoloji
Selenium ile Test Otomasyon Süreçleri
Eki 19, 2020 | Açık Kaynak