Write-Ahead Logging nedir ve RDBMS’ler neden kullanır?

Gökhan Şengün
Sep 25, 2017 · 2 min read

Bu flood’da RDBMS’lerde ACID prensiplerinden A (Atomicity) ve D (Durability)’yi sağlayan Write-Ahead Logging (WAL)’i anlatacağım.

Önceki flood’larda ACID prensiplerinin genel amacına ve kısaca Atomicity, Consistency, Isolation ve Durability özelliklerine değinmiştik.

Veri tabanı yönetim sistemleri, üzerlerinde yapılan değişiklik, yeni kayıt ekleme ve silme işlemlerini, bilgilerin asıl tutulduğu diskteki Data Page’lere yazmanın yanında Transaction Log adı verilen log dosyalarına da yazarlar. Write-Ahead Logging (WAL adı verilen mekanizma ise database'lerde, transaction log dosyası diske yazılmadan Data Page'in diske yazılmayacağını garanti eder. Evet yanlış okumadınız, RDBMS öncelikle transaction log'u diske yazar, sonra da Data Page'i diske yazar.

Şimdi aşağıdaki görselde özetlenen bu mekanizmanın neden var olduğunu anlamaya çalışalım.

Image for post

RDBMS’ler Transaction’ı başlatan ve commit eden uygulamaya “Başarılı bir şekilde Commit edildi” bilgisini Transcation Log dosyası diske yazıldığında verirler. Data Page’lerin 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. Bu anlamda RDBMS’lerin WAL mekanizmasıyla A ve D özelliklerini sunmanın yanı sıra performans artışı sağladığını da söyleyebiliriz. Bazı RDBMS’ler (Postgres, MS-SQL) risk alarak performans için, A ve D’den taviz vermek isteyenlere özel Transcation Log’ların diske yazılma işleminin Asenkron yapılmasına da olanak tanır. Bu durumda RDBMS, Transaction Log’un diske yazılmasını beklemeden Transaction’ın başarılı olduğunu uygulamaya bildirir.

Transaction’ın ortasında sunucunun çökmesi veya elektriğinin kesilmesi durumunu ele alalım. İlk örnekte database Ram’de Transaction Log’a bütün işlemi kaydetmiş, diske Transaction Log’u yazmış ancak Data Page’lere yazamamış olsun. Database yeniden başlatıldığında Transaction Log’u okuyarak aslında tamamlanmış olan Transaction’ın Data Page’lere işlenmediğini anlayacak ve Transaction Log’u tekrar Replay ederek Data Page’lere ilgili data’nın doğru olarak yazılmasını sağlayacaktır. Bu şekilde hem Durability hem de Atomicity’yi sağlamış olacaktır.

İkinci bir örnek olarak yine elektrik kesilmesi sonucu database Ram’de Transaction Log’a bütün işlemi kaydetsin fakat bu Transaction Log’u diske aktarmaya çalışırken işlemin yarısında elektrik kesintisi olsun. Database bu durumda yeniden başlatıldığında Transaction Log’da bir takım işlemlerin başladığını fakat Commit edilmediğini görecek ve bu Transaction’ı yok sayacaktır.

Son olarak Transaction’ın yaşam döngüsünden bağımsız olarak Checkpoint adı verilen mekanizma Transaction Log dosyaları diske yazılmış olan Data Page'leri asenkron olarak diske yazar.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch

Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore

Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store