28 Mart 2016 Pazartesi

Sql Server da Transaction Yapısı



Transaction kelimesinin Türkçe karşılığı işlemdir. Aslında adından da anlaşılacağı üzere SQL Server üzerinde yapılan işlemlerin tümüne verilen addır diyebiliriz. Fakat bu noktada SQL Server'ın arka plandaki çalışma mantığını anlamak ve gönderilen transactionları ne şekilde karşıladığını, kaç çeşit transaciton yapısı olduğunu bu yazıda ele alacağız.
Transaction yapısını en basit hali ile ifade etmeye çalışırsak aslında daha küçük parçalara ayrılamayan işlem bloğudur denilebilir. Transaciton yapısını korumak için temel 4 ana kural vardır. Bu 4 kuralın genel olarak adına ACID denilmektedir. ACID; Atomicity , Consistency, Isolation ve Durability nin baş harflerinden oluşmuştur. Şimdi aşağıda bu 4 temel maddeyi inceleyelim:

Atomicty: Bölünmezlik olarak nitelendirilir. Başlatılan bir transaction bloğu çalıştıktan sonta herhangi bir şekilde bölünemez ya da işlem yarım kalamaz kuralaını ifade eder. Ya başaltılan işlem başarılı olarak tamamlanalarak sonlanır ya da bir sorun oluşması haline en başa dönülmesi gerekmektedir.
Consistency:  Tutarlılık olarak nitelendirilir. Transaciton bloğunun içerisinde bulunan ara işelmler arasında yaşanabilecek herhangi bir bozukluk data tarafında bozukluğa sebep olacağı için veri bazında tutarsızlığa sebep olabilir. Bu durumda transacition yapısının tutarlılığı sağlaması gerekmektedir.
Isolation: Transactionlar arasındaki İzolasyonu temsil eden kuraldır. Database de bulunan diğer farklı transactionlar veritabanı yapısı içerisinde birbirinden bağımsız olarak ele alınmalıdır. Ve transaction içerisindeki ara işlemlerden ziyade transaction diğer transacitionlar tarafından bir bütün olarak görülmelidir.
Durability: Dayanıklılık kuralını temsil eder. Transactionlar çalışma esnasında meydana gelen problemlere karşı dayanaklı olabilmelidir ve bunlardan etkilenmemesi gerekir.Bu problemler işletim sistminin çökmesi, ana kartın yanması gibi durumlar olabilir. İşlem sırasında meydana gelen beklenmedik bir problem sırasında başarılı şekilde rollback olayını sağlayabilmesi gerekir.

SQL Server da Transactionların Çalışma Mantığı

SQL Server çalışma mantığı olarak eğer bir kayıt üzerinde değişiklik yapacaksa öncelikle kayıtların bulunduğu ilgili sayfaları HDD'den RAM'e alınıp alınmadığını kontrol eder. Eğer RAM de bulunmuyorsa öncelikle ilgili Data Page'ler Buffer Cashe'e çıkartılır. Daha sonrada ilgili kayıtlar üzerinde değişiklikler yapılır. Fakat bu yapılan değişikliler hemen HDD'ye yansıtılmaz. Tam bu zaman aralığında değişiklik yapılan kayıt RAM ve HDD üzerinde farklı değerlere sahiptir. Bu gerçekleşen olaya DIRTY PAGE denilmektedir.

SQL Server da ki Transaction Çeşitleri

SQL Server da toplam 3 çeşit Transaction vardır.
o    Explict Transaction
o    Implict Transaction
o    AutoCommit

AutoCommit Transaction

         SQL Server default olarak AutoCommit olarak çalışmaktadır. Her bir işlem ayrı ayrı ele alınır. Örneğin iki farklı update işlemini art arda çalıştırdığınızda, ilkinde oluşan bir hata ikincisinin çalışmasını etkilemeyecektir ve ikinci işlem iptal edilmeden update işlemini sağlayacaktır. Bu modda SQL Server her bir işlemi ayrı ayrı olarak ele alır.

Explict Transaction

       AutoCommit de her bir işlemin ayrı ayrı el alındığını söylemiştik. Fakat bazen ihtiyaçlar dâhilinde farklı birkaç işlemin birleşimi tek bir işlemi oluşturmaktadır ve bu işlemlerin herhangi birinde gerçekleşecek bir hata aslında nihai sonucu etkileyeceği için en başa dönülmesi gerekir ki developer bunun autocommit modunda handle edemeyecektir. Bu noktada developer Explict Transaction ile kendi transaction bloğunu tanımlayarak ilgili alt işlemleri tek bir transaction da toplayabilir. Bunu yaparken de  begin tran ile transaction'nı başlatıp commit tran ve rollback ile transaciton'ı sonlandırır. Eğer transaciton başarılı bir şekilde sonlanırsa commmit tran ile değişiklikler disc'e kayıt edilmiş olur ya da işlem sırasında herhangi bir problem yaşanırsa try cacth bloğuna düşen hata ile en başa dönülür. (@@Error değişkeni ilede ata olup olnumadğı kontrol edilerek buradan da rollback ile dönülebilir. Ama her bir işlem sonunda @@error ile kontrol edilmesi gerekeceği için Try catch bloğu ile hata kontrolü sağlamak çok daha kolay olacaktır.) Bir diğer husus ise Begin tran ifadesinden sonra işlem sonunda rollhback ya da commit ile transaciton'nın sonlandırlması unutulamamalıdır. Aksi halde transaction sonlanmayacak ve sistem kaynakları gerekesiz yere kullanılmaya devam edecektir.

Save Point nedir ?
Eğer çok uzun transactionlar üzerinde çalışıyorsak save points'ler ile herhangi bir problem durumunda en başa dönmek yerine bizim belirlediğimiz alanlara kadar geri dönme işlemini sağlayabiliriz.


Not:@@trancount değeri sistemde anlık olarak açık olan transaction ları bize göstermektedir.

Begin Tran

--Alt işlemler

Commit tran // Rollback

Implicit Transaction

Implict_Transaciton On ifadesini kullanarak truncate table, alter table, select, create, revoke, delete, open, drop,insert, fetch ve update ifadelerinden sonra transaciton Sql Server tarafından otomatik olarak başatılır. Fakat bu durumda bizim commit yada rollback ifadeleri ile kapatmamız gerekir. Implict_transaction off  ile SQL Server default özelliği olan AutoCommit moda geri döner. Oracle da ise deafult olarak Implict Transaction kullanılmaktadır.Bir sonrakiş yazıda örneklerle konuyu çeşitlendirmeye çalışacağız.

0 yorum :

Yorum Gönder