
Bu makalede Sql Server ACID kurallarına değinmiş olacağım. İlişkisel veritabanı yönetim sisteminde her bir transaction için sağlanması gereken 4 ana kuraldır. Bir transaction’ın başarılı bir şekilde gerçekleşebilmesi için ACID ilkelerine uyması gerekmektedir. MSSQL server bu yapı üzerine çalışmaktadır.
Şimdi bu 4 kuraldan bahsedelim.
Atomicity (Bölünmezlik): Herhangi bir transaction işleminde işlemin sorunsuz şekilde tamamlanmasıdır. Transaction başlangıcından bitişine kadar adımların birinde herhangi bir sorunla karşılaşılırsa yapılan işlem hiç yapılmamış gibi sayılır. Bu duruma 0-1 olayı da diyebiliriz. Ya hep ya hiç prensibidir. Klasik bir örnek olacak ama banka para transferinde başka bir hesaba para göndermek istediğiniz de para hesabınızdan düşülür. Para gönderilecek hesaba geçmeden sistem kapandı ne olur. Hem kendi hesabımızda para yok hem de para gönderilecek hesapta. Burada sql server’ın Atomicity kavramı devreye girer işlem hiç tamamlanmamış gibi para gönderecek hesapta kalır.
Consistency (Tutarlılık): Transaction tam anlamı ile gerçekleşinceye kadar (constraints, cascades, triggers) işlemden etkilenen verilerin değerlerinin bir önceki geçerli değeri vermesidir. Karşılıklı para transferi yapan iki hesabın hesabındaki gerçek paranın son durumu, para transfer işlemi tamamlanınca görülmektedir. With(nolock) yapısında veriyi dirty page’den okuyabildiği için Consistency yapısına aykırıdır.
Isolation (Yalıtım): Bir transaction bir veri kümesi üzerinde işlem yapacağı zaman ilgili veri kümesi üzerine bir kilit koyar. Gelen diğer transactionlar ilk gelen ilk çıkar mantığı ile sıraya girmektedir. SQL Server’da bir çok Isolation Level vardır. Default olarak Read Committed Isolation Level’i kullanır.
Durability (Süreklilik): Transaction işlemi sırasında yazılımsal veya donanımsal herhangi bir hata ile karşılaşılınca veri her ne kadar transaction sırasında değişime de uğrasa işlem başarısız olursa veri gerçek değerini korumaktadır. Bu yapı Atomicity yapısınıda göstermektedir. Başka bir örnek vermek gerekirse tablomuza yeni bir değer insert etmiş olduk. Bu değer commit edildikten sonra herhangi bir sebepten sonra sunucu kapanırsa sql server ldf dosyası sayesinde sürekliliği sağlamaktadır.
Ancak bir işlem ACID kurallarına uygun değilse ya da bu kurallara uyacak şekilde tamamlanamazsa, Transaction Manager bu durumu aşağıdaki şekilde ele alır:
1. Atomicity (Bölünmezlik)
İşlem ya tamamen yapılır ya da hiç yapılmaz.
Uygun Olmaması Durumu: İşlem sırasında bir hata oluşursa (örneğin, ağ kesintisi, disk arızası veya sorgu hatası):
Rollback (Geri Alma): Transaction Manager, işlemin yapılmış olan kısımlarını geri alır ve işlemi iptal eder.
Sonuç: Sistem, sanki işlem hiç yapılmamış gibi olur.
2. Consistency (Tutarlılık)
Kural: Bir işlem tamamlandığında veritabanı tutarlı bir durumda olmalıdır.
Uygun Olmaması Durumu: Eğer işlem sonrası veritabanında tutarsız bir durum oluşursa (örneğin, veri türü uyuşmazlıkları, kısıtlama ihlalleri):
İşlem İptali: Transaction Manager işlemi durdurur ve veritabanını eski tutarlı haline geri döndürmek için rollback yapar.
Hata Kaydı: Hata mesajı üretilir ve kullanıcı bilgilendirilir.
3. Isolation (Yalıtım)
Kural: Bir işlem, diğer işlemlerden bağımsız çalışmalı ve diğer işlemlerin verisini etkilememelidir.
Uygun Olmaması Durumu: Eğer bir işlem diğer bir işlemle çakışırsa (örneğin, aynı satıra eşzamanlı yazma girişimi):
Kilitleme Mekanizmaları: Transaction Manager, veriler üzerinde uygun kilitler uygulayarak işlemler arasındaki etkileşimi önler.
Hata Durumu: Eğer kilitler bir deadlock (kilitlenme) oluşturursa, bir işlem durdurulur ve rollback yapılır.
4. Durability (Süreklilik)
Kural: Bir işlem başarıyla tamamlandıktan sonra sonuçları kalıcı olmalıdır. (Hatta sistem çökse bile veri kaybı olmamalı.)
Uygun Olmaması Durumu: Eğer bir işlem tamamlandıktan sonra sonuçları kalıcı hale getirilemiyorsa (örneğin, disk arızası veya sistem çökmesi):
Transaction Log Kullanımı: İşlemin tamamlanmış adımları Transaction Log içinde saklanır. Sistem yeniden başlatıldığında log kullanılarak işlemin tamamlanmamış adımları tamamlanır ya da geri alınır.
Hata Öncesi Duruma Dönüş: Eğer işlem kalıcı hale getirilemiyorsa, rollback yapılır ve hata raporlanır.
Transaction Manager’ın Karar Süreci
1. Hata Tespiti:
İşlem sırasında herhangi bir ACID kuralı ihlal edilirse, Transaction Manager bunu algılar.
2. Rollback:
İşlem geri alınır ve sistem eski tutarlı haline döner.
3. Hata Mesajı:
Kullanıcıya veya uygulamaya uygun hata mesajı iletilir.
4. Transaction Log Kullanımı:
Yarım kalan işlemleri geri almak veya tamamlamak için log kayıtları kullanılır.
Bu makalede Transaction işlemlerinde ACID yapısını ele almış olduk. Başka bir makalede görüşmek dileğiyle..
Onlar – “Emanetlerine İhanet Etmezler. ” Mu’minun / 8