ACID’in Isolation’ına Yakından Bakış

İlk iki flood’da RDBMS’lerin ACID özelliklerine değinmiştik. Bu flood’da ise ACID’in Isolation özelliğine biraz derinlemesine dalacağız.

Önceki flood’dan görülebileceği gibi Isolation özelliği, veri bütünlüğünü sağlamak üzere aynı kaydın işlendiği Transaction’ları seri olarak koşturmaktadır. Seri olarak koşturulan Transaction’lar paralel işleme özelliğini kullanamayacaklarından performans problemi yaratabilir.

Kurduğumuz sistemin iş kurallarına göre veri tabanı tabloları üzerinde yapılan işlemlerin birbirinden katı bir şekilde izole edilmesi gerekmeyebilir. Örneğin bir Dashboard’da sistemdeki toplam kullanıcı sayısını göstermek üzere yaptığımız bir sorgunun, performans gerekçesiyle aynı anda sisteme yeni bir kullanıcıyı dahil etmek için koşturduğumuz bir Transaction’dan etkilenmemesini isteyebiliriz. Buna karşın yine iş kuralları çerçevesinde, Dashboard’da anlık olarak muhakkak gerçek değeri vermemiz gerektiğinde, yeni kullanıcıyı sisteme dahil eden Transaction’ın toplam kullanıcı sayısını verecek sorguyu etkilemesini de isteyebiliriz.

Farklı ihtiyaçlara göre, kullanıcılar ve RDBMS arasında bir protokol oluşturmak üzere, SQL Standardında 4 izolasyon seviyesi Serializable, Repeatable Read, Read Committed ve Read Uncommitted olarak tanımlanmıştır. Verilen Transaction Isolation Level’leri somutlaştırmak ve seçimi kolaylaştırmak adına literatürde genel olarak 3 durum verilir ve iş ihtiyaçlarınızın bu durumlara uygunluğuna göre Transaction’larınızda ilgili izolasyon seviyesini seçmeniz beklenir.

İlk durum ‘Dirty Read’dir, bir Transaction’ın aynı anda işletilmekte olan başka bir Transaction bitmeden o Transaction’ın etki ettiği dataları okuyabilmesi anlamına gelir (yukarıda verilen ilk Dashboard örneği).

‘Nonrepeatable Read’, bir Transaction’ın aynı kaydı iki kere okuduğunda farklı değerler (ilk okumadan sonra sonlanan başka bir Transaction’dan dolayı) elde edebileceği anlamına gelir.

‘Phantom Read’ ise bir Transaction’ın ilk yaptığı sorgudan dönen kayıtların aynı sorguyu aynı Transaction içerisinde ikinci kez yapması ile farklı sayıda kayıt (yine ilk sorgudan sonra başka Transaction tarafından tabloya eklenen kayıtlar dolayısıyla) dönebilmesi anlamına gelir.

Uygulamamızın yukarıdaki üç duruma tahammül edip edemeyeceğine göre aşağıdaki tablodan Transaction Isolation Level belirlenir.