Aracılığıyla paylaş


İşlem Yalıtım Düzeyleri (ODBC)

İşlem yalıtım düzeyleri, işlem yalıtımının ne ölçüde başarılı olduğunu gösteren bir ölçüdür. Özellikle, işlem yalıtım düzeyleri aşağıdaki olayların varlığı veya yokluğu ile tanımlanır:

  • Kirli Okumalar Bir işlem henüz işlenmemiş verileri okuduğunda kirli bir okuma oluşur. Örneğin, işlem 1 bir satırı güncellediğini varsayalım. İşlem 2, 1. işlem güncelleştirmeyi işlemeden önce güncelleştirilmiş satırı okur. 1. işlem değişikliği geri alırsa, 2. işlem hiçbir zaman var olmadığı kabul edilen okuma verilerine sahip olur.

  • Güncelleştirilemeyen Okumalar Bir işlem aynı satırı iki kez okuduğunda ancak her seferinde farklı veriler aldığında, güncelleştirilemeyen bir okuma gerçekleşir. Örneğin, 1. işlemin bir satırı okuduğunu varsayalım. İşlem 2, bu satırı günceller veya siler ve güncelleştirme ya da silmeyi tamamlar. 1. işlem satırı yeniden okursa, farklı satır değerleri alır veya satırın silindiğini bulur.

  • HayaletHayalet , arama ölçütlerine uyan ancak başlangıçta görünmeyen bir satırdır. Örneğin, işlem 1'in bazı arama ölçütlerini karşılayan bir satır kümesini okuduğunu varsayalım. İşlem 2, 1. işlemin arama ölçütleriyle eşleşen yeni bir satır (bir güncelleştirme veya ekleme yoluyla) oluşturur. Eğer İşlem 1, satırları okuma deyimini yeniden yürütürse, farklı bir satır kümesi elde eder.

Dört işlem yalıtım düzeyi (SQL-92 tarafından tanımlandığı gibi) bu olaylar açısından tanımlanır. Aşağıdaki tabloda, "X" gerçekleşebilecek her bir fenomeni işaretler.

İşlem yalıtım düzeyi Kirli okumalar Tekrar Edilemez Okumalar Hayalet
Okunmamış Verileri Okuma X X X
Okundu -- X X
Yinelenebilir okuma -- -- X
Serileştirilebilir -- -- --

Aşağıdaki tabloda bir DBMS'nin işlem yalıtım düzeylerini uygulayabileceği basit yollar açıklanmaktadır.

Önemli

Çoğu DBMS eşzamanlılığı artırmak için bunlardan daha karmaşık düzenler kullanır. Bu örnekler yalnızca çizim amacıyla sağlanır. Özellikle ODBC, belirli DBMS'lerin işlemleri birbirinden nasıl yalıtdığını yazmaz.

İşlem yalıtımı Olası uygulama
Okunmamış Verileri Okuma İşlemler birbirinden yalıtılmaz. DBMS, diğer işlem yalıtım düzeylerini destekliyorsa, bu düzeyleri uygulamak için kullandığı mekanizmayı göz ardı eder. Diğer işlemleri olumsuz etkilememeleri için, Kaydedilmemiş Okuma düzeyinde çalışan işlemler genellikle salt okunur yapıda olur.
Okundu İşlem, diğer işlemler tarafından yazma kilidi ile kilitlenmiş satırların serbest bırakılmasını bekler; bu, "kirli" verileri okumasını engeller.

İşlem, diğer işlemlerin güncelleştirmesini veya silmesini önlemek için geçerli satırda bir okuma kilidi (yalnızca satırı okuyorsa) veya yazma kilidi (satırı güncelleştirir veya silerse) tutar. İşlem, geçerli satırdan hareket ettiğinde okuma kilitlerini serbest bırakır. İşleme veya geri alma gerçekleşene kadar yazma kilitlerini tutar.
Yinelenebilir okuma İşlem, diğer işlemler tarafından yazma kilidiyle kilitlenmiş satırların kilidinin açılmasını bekler; bu, "kirli" verileri okumasını engeller.

İşlem, uygulamaya döndürdüğü tüm satırlarda okuma kilitleri tutar ve eklediğiniz, güncelleştirdiğiniz veya sildiğiniz tüm satırlarda yazma kilitleri tutar. Örneğin, işlem SELECT * FROM Orders SQL deyimini içeriyorsa, uygulama bunları getirirken işlem satırları okuma kilidi uygular. İşlem, DELETE FROM Orders WHERE Status = 'CLOSED' SQL deyimini içeriyorsa, bu SQL deyimi satırları silerken yazma kilidi uygular.

Diğer işlemler bu satırları güncelleyemediği veya silemediğinden, geçerli işlem tekrarlanmayan okumaları önler. İşlem onaylandığında veya iptal edildiğinde kilitlerini serbest bırakır.
Serileştirilebilir İşlem, diğer işlemler tarafından yazma kilidi konulmuş satırların kilidinin açılmasını bekler; bu, "kirli" verileri okumasını engeller.

İşlem, etkilediği satır aralığında bir okuma kilidi (yalnızca satırları okuyorsa) veya yazma kilidi (satırları güncelleştirebiliyor veya silebilirse) tutar. Örneğin, işlem SELECT * FROM Orders SQL deyimini içeriyorsa, aralık Orders tablosunun tamamıdır; işlem tabloyu okuma kilidine alır ve tabloya yeni satır eklenmesine izin vermez. İşlem, SQL deyimini DELETE FROM Orders WHERE Status = 'CLOSED' içeriyorsa, aralık "KAPALI" Durumu olan tüm satırlar olur; işlem, Orders tablosundaki tüm satırları "KAPALI" durumuyla kilitler ve sonuçta elde edilen satırın "KAPALI" durumu olacak şekilde satır eklenmesine veya güncelleştirilmesine izin vermez.

Diğer işlemler aralıktaki satırları güncelleyemediği veya silemediği için, mevcut işlem tekrarlanamaz okumaları önler. Diğer işlemler aralığa herhangi bir satır ekleyemediğinden, geçerli işlem herhangi bir hayaletten kaçınıyor. İşlem, taahhüt edildiğinde veya geri alındığında kilidini serbest bırakır.

İşlem yalıtım düzeyinin bir işlemin kendi değişikliklerini görme becerisini etkilemediğini unutmayın; işlemler her zaman yaptıkları değişiklikleri görebilir. Örneğin, bir işlem iki UPDATE deyiminden oluşabilir. Bunlardan ilki tüm çalışanların ödemesini yüzde 10 artırır ve ikincisi herhangi bir çalışanın ödemesini bir miktar üst sınırın üzerinde bu tutara ayarlar. Bu tek bir işlem olarak başarılı olur çünkü ikinci UPDATE deyimi ilk işlemin sonuçlarını görebilir.