Write Ahead Logging (WAL), veri bütünlüğünü(data integrity) sağlamaya yönelik standart bir yöntemdir. Postgresql, üzerlerinde yapılan, insert/update/delete işlemlerini, bilgilerin asıl tutulduğu diskteki Data Page’lere yazmanın yanında Transaction Log adı verilen log dosyalarına da yazarlar. Hatta verilerin  tutulduğu data page’den önce transaction log’u diske yazar, sonrasında ihtiyaca göre data page’e yazar. Hatta commit edilen uygulama başarılı bir şekilde Commit edildi bilgisini Transcation Log dosyası diske yazıldığında verirler, data Page’lere diske yazılmasını beklemezler. Transaction Log’lar ardışıl disk Page’lerinde oldukları için onların diske yazılması muhtemelen dağınık durumda bulunan Data Page’lerin diske yazılmasından daha hızlı olacaktır.

NOT : PostgreSQL performans için Atomicity ve Durability’den taviz  vermek isteyenlere özel Transcation Log’ların diske yazılma işleminin Asenkron yapılmasına da olanak tanır. Bu durumda Postgresql, Transaction Log’un diske yazılmasını beklemeden Transaction’ın başarılı olduğunu uygulamaya bildirir ancak tam bu sırada sunucu çökmesi durumunda veri kaybı yaşanabilir.

Transaction log, veritabanının önemli bir parçasıdır, çünkü veritabanı yönetim sisteminin bir sistem arızası meydana geldiğinde bile herhangi bir veriyi kaybetmemesi gerekir. Elektrik kesintisi veya sunucu çökmesine neden olan başka bir sunucu arızası gibi arızalar nedeniyle hiçbir verinin kaybolmamasını sağlamak için bir veritabanı sistemindeki tüm değişikliklerin ve eylemlerin bir geçmiş logudur. Log, halihazırda yürütülen her transaction hakkında yeterli bilgi içerdiğinden, veritabanı sunucusunun, sunucu çökmesi durumunda transaction log’daki değişiklikleri ve eylemleri yeniden çalıştırarak veritabanı clusterı kurtarabilmesi gerekir. Veri tabanında transaction log kayıtlarının tutulmadığı durumu düşündüğümüzde, shared buffer poolda değiştirilmiş ama diske henüz değişikliklerin kalıcı olarak yazılmadığı durumlarda bir kesinti veya veri tabanı kapanması olduğunda transactionların tabloya eklediği veriler kaybedilir.

NOT : Bu arada, crash durumunda recovery işleminin nasıl yapıldığına delecek olursak; Her bir checkpoint işleminden sonra transaction log dosyası sıfırlanır ve checkpoint ile ilgili bilgiler pg_control dosyasına yazılır, recovery işlemi yapılacağında sunucu öncelikle pg_control dosyasını ve checkpoint kaydını okur ve checkpoint kaydından sonraki transactionları REDO işleminden geçirir yani wal dosyalarından okur. pg_controldata ile controlfile’ın içine baktığımızda yukarıdada yazdığım gibi en sonki checkpointin LSN yazacaktır.

pg_controldata
(continue reading…)

Loading