PostgreSQL Write Ahead Log

PostgreSQL de WAL(Write Ahead Log) kavramı

 

PostgreSQL’in işlem günlüğüdür. Yapılan işleri kayıt altında tutar.Data dosyalarına yazılmadan önce dataları burada tutar ve checkpoint işlemi ile dataya verileri yazar.

Bu dediklerim karışık gelmiş olabilir onun için biraz daha açıklayım.

Veritabanı oluşturdunuz ve bu veritabanı içerisinde tablo oluşturdunuz ,veri eklediniz, verileri güncellediniz, yanlış bir işlem yaptınız ,yanlış yapılan işlemleri

sildiniz ve kontrol etmek için select çektiniz ve bu select sorgununuzun yavaş geldiğini görüp ilgili alanlara index(sorgu performansı için ilerde detaylı anlatılacaktır.) oluşturdunuz .

Bunun gibi işlemler wal’e yazılır.

Bunun nedeni ise veritabanı sunucunuz siz update yaptıktan hemen sonra kapandığını varsayalım siz birden düşünmeye başlıyorsunuz acaba verilirim gitti mi silindi mi?

Cevabı hayır siz işlemi gerçekleştirdikten sonra verileriniz log a yani WAL e yazıldı .Sunucu açılıp verilerinizi sorguladığınızda verilerin orada olduğunu göreceksiniz.

Şunu da belirtmek isterim ki bazı durumlarda verileriniz gidebilir. WAL kavramının iyice oturması için farklı bir örnek verelim.

Veritabanını yanlışlıkla sildiniz ve uygulama artık veritabanına erişemiyor … Elinizde yedeğiniz varsa yedekten geri dönüş yapabilirsiniz .

Bunun WAL ile ne alakası var diyebilirsiniz.Yedeğinizi geri yüklerken WAL den de yardım alırsınız . Biraz önce WAL de herşeyin kayıt altına alındığından bahsetmiştim.

veritabanını geri yüklerken veritabanın silinmeden önceki son yapılan işlemleri kayıt altına alımıştır ve son kayıtları bu sayede WAL yardımı ile yükleyerek

silmeden önceki haline geri getirebilirsiniz.

Örneklemeden sonra biraz detaya girelim.
Postgresql de wal özelliği  otomatik olarak enable şeklinde gelmektedir bu özelliği kapatamazsınız.

Postgresql’in loglarını incelemek için data dosyasının içinde ki pg_wal klasörüne giriyoruz ve orada karışık  numaraları görüyoruz bunların anlamı nedir neden böyle tutulur bunlardan bahsedelim.

Pg_wal içinde ki dosya adları 24 karakterden oluşur ve değerler hexadecimal olarak tutulur. İlk 8 karakter timeline bilgisini verir. Sonraki 16 karakter ise WAL idsini verir ve Wal’ler 16 MB  boyutuna sahiptir.

Loading