Transaction Isolation Seviyeleri
Bu makalemde daha önceki makalemde bahsettiğim Locking problemlerinin çözümlerinden bahsedeceğim.
ANSI standartlarına uygun olarak Locking problemini çözmek için 4 izolasyon seviyesi kullanılır.Bunlar Serializable,Repetable read,read committed ve read uncomitted olarak tanımlanmıştır.Tabloda yer alan diğer seviyeleri sql desteklemektedir.Aşağıdaki tabloda izolasyon seviyelerinin izin verip-vermediği durumlar ile ilgili bilgiler yer almaktadır.
Tabloyu kısaca özetleyecek olursak.Örnek vermek gerekirse repeatable read level’ını ele alırsak,eş zamanlı sorgularda sadece phantom read durumuna izin verecektir.Aynı şekilde serializable ve snapshot transaction’lar arasında oluşabilecek sorunlara izin vermez.
Read Uncommitted:En düşük isolasyon seviyesidir.Dirty read durumuna izin verir.2 farklı transaction için transaction’ların herhangi birinde işlem commit edilmemiş data’yı gösterir.Yani işlem hata alıp rollback olsa dahil yanlış data’yı gösterir.Yanlış veri çekme olasılığı olan bir level’dir.
Read Committed:Mssql’in varsayılan varsayılan isolasyon seviyesidir.Phantom ve non-repetable read durumuna izin verirken dirty read durumuna izin vermez ve timeout expired hatası alırsınız.Özetlemek gerekirse bir transaction içerisinde yapılan insert-update işlemlerinin başka bir transaction işleminde gözükebilmesi için işlemin commit veya rollback yapılması gerekir.
Repetable Read:Sadece phantom-read durumuna izin verir.Diğer durumların oluşması durumunda timeout expired hatası alırız.
Serializable:Herhangi bir locking işleminin oluşmasına izin vermez.Özetlemek gerekirse eş zamanlı çalışan 2 transaction işlemi için insert-update işlemine izin vermez.Sadece select işlemine izin verir.
Ayrıca projenizde kullandığınız veritabanı çeşidine göre varsayılan isolation seviyelerini paylaşıp bu makalemi sonlandırıyorum.
MYSQL:Innodb’nin varsayılan isolasyon seviyesi repetable read’dir.Eğer transaction isolasyon seviyesini değiştirmek istersek aşağıdaki sql sorgusunu çalıştırmamız yeterlidir.
MSSQL:Varsayılan isolasyon seviyesi read committed’dir.Eğer transaction isolasyon seviyesini değiştirmek istersek aşağıdaki sql sorgusunu çalıştırmamız yeterlidir.
POSTGRESQL:Varsayılan isolasyon seviyesi read committed’dir.Eğer transaction isolasyon seviyesini değiştirmek istersek aşağıdaki sql sorgusunu çalıştırmamız yeterlidir.
Umarım transaction isolasyon yönetimleri ile ilgili faydalı bilgiler verebilmişimdir.İyi çalışmalar.