2.1 Taahhütsüz okuma

"İşlem yalıtım düzeyi", işlemlerin paralel yürütülmesi sırasında meydana gelen yukarıdaki veri tutarsızlık türlerinin tümüne veya bazılarına karşı DBMS'nin dahili mekanizmaları tarafından sağlanan (yani, özel programlama gerektirmeyen) koruma derecesini ifade eder. SQL-92 standardı, dört yalıtım düzeyinden oluşan bir ölçek tanımlar:

  • Taahhütsüz oku
  • Taahhüt edilen okuma
  • tekrarlanabilir okuma
  • Serileştirilebilir

Bunlardan ilki en zayıfı, sonuncusu en güçlüsüdür, sonraki her biri öncekilerin hepsini içerir.

En düşük (ilk) izolasyon seviyesi. Birkaç paralel işlem aynı tablo satırını değiştirmeye çalışırsa, son satırın değeri, başarıyla tamamlanan işlemlerin tamamı tarafından belirlenir. Bu durumda sadece mantıksal olarak tutarsız verileri değil, değişiklikleri henüz kaydedilmemiş verileri de okumak mümkündür.

Bu yalıtım düzeyini uygulamanın tipik bir yolu, change komutu yürütülürken verileri kilitlemektir; bu, paralel olarak çalışan aynı satırlardaki değişiklik komutlarının aslında sıralı olarak yürütülmesini ve değişikliklerin hiçbirinin kaybolmamasını sağlar. Salt okunur işlemler, bu yalıtım düzeyi altında asla bloke edilmez.

2.2 Okuma taahhüdü

Çoğu endüstriyel DBMS, özellikle Microsoft SQL Server, PostgreSQL ve Oracle bu düzeyi varsayılan olarak kullanır. Bu seviyede taslak, “kirli” okumaya karşı koruma sağlanır, ancak bir işlemin çalışması sırasında diğeri başarıyla tamamlanabilir ve yaptığı değişiklikler sabitlenir. Sonuç olarak, ilk işlem farklı bir veri seti ile çalışacaktır.

Tam bir okumanın uygulanması iki yaklaşımdan birine dayanabilir: engelleme veya sürüm oluşturma.

Okunabilir ve değiştirilebilir verileri engelleme.

Yazma işleminin, okuma taahhüt seviyesinde veya daha yüksek düzeyde çalışan okuma işlemleri için değişken verileri tamamlanana kadar bloke etmesi, böylece "kirli" okumayı önlemesi ve okuma işlemi tarafından kilitlenen verilerin işlem tamamlandıktan hemen sonra serbest bırakılmasından oluşur. SELECT(böylece, belirli bir yalıtım düzeyinde "tekrarlanamayan bir okuma" durumu meydana gelebilir).

Paralel olarak değişen satırların birden çok sürümünü kaydetme.

Bir satır her değiştirildiğinde, DBMS bu satırın yeni bir sürümünü oluşturur; bu sürümle verileri değiştiren işlem çalışmaya devam ederken, diğer herhangi bir "okuma" işlemi son taahhüt edilen sürümü döndürür. Bu yaklaşımın avantajı, engellemeyi önlediği için daha hızlı olmasıdır. Bununla birlikte, birincisine kıyasla, satır sürümlerini depolamak için harcanan önemli ölçüde daha fazla RAM tüketimi gerektirir.

Ek olarak, birden fazla işlem verileri paralel olarak değiştirdiğinde, birkaç eşzamanlı işlemin aynı veriler üzerinde tutarsız değişiklikler yaptığı bir durum yaratabilir (kilit olmadığından, bunun olmasını hiçbir şey engelleyemez). Daha sonra ilk taahhüt eden işlem, değişikliklerini ana veritabanına kaydedecek ve kalan paralel işlemlerin gerçekleştirilmesi imkansız olacaktır (çünkü bu, ilk işlemin güncellemesinin kaybolmasına neden olacaktır). Böyle bir durumda DBMS'nin yapabileceği tek şey, işlemlerin geri kalanını geri almak ve "Kayıt zaten değiştirildi" hata mesajını vermektir.

DBMS geliştiricileri tarafından belirli bir uygulama yöntemi seçilir ve bazı durumlarda özelleştirilebilir. Bu nedenle, varsayılan olarak, MS SQL kilitleri kullanır, ancak (2005 ve sonraki sürümlerde) veritabanı READ_COMMITTED_SNAPSHOTparametresini ayarlarken, sürüm oluşturma stratejisine geçer, Oracle başlangıçta yalnızca sürümlenmiş şemaya göre çalışır. USELASTCOMMITTEDInformix'te, okuma işleminin en son taahhüt edilen verileri almasına neden olan bir yapılandırma seçeneği (sürüm 11.1'den itibaren) ayarlayarak okuma ve yazma işlemleri arasındaki çakışmaları önleyebilirsiniz .

2.3 Tekrarlanabilir okuma

Bir okuma işleminin "görmediği" seviye, daha önce okuduğu verilere göre değişir. Aynı zamanda başka hiçbir işlem o anki işlemin okuduğu veriyi bitene kadar değiştiremez.

Paylaşılan moddaki kilitler, bir işlemdeki herhangi bir talimat tarafından okunan tüm verilere uygulanır ve işlem tamamlanana kadar tutulur. Bu, diğer işlemlerin bekleyen işlem tarafından okunan satırları değiştirmesini engeller. Ancak, diğer işlemler, geçerli işlemde yer alan talimatlar için arama koşullarıyla eşleşen yeni satırlar ekleyebilir. İfade, geçerli işlem tarafından yeniden başlatıldığında, yeni satırlar getirilecek ve bu da hayali bir okumayla sonuçlanacaktır.

Paylaşımlı kilitlerin her ifade sonunda serbest bırakılmak yerine işlemin sonuna kadar tutulduğu göz önüne alındığında, eşzamanlılık derecesi izolasyon seviyesinden daha düşüktür READ COMMITTED. Bu nedenle, genellikle gereksiz yere bu ve daha yüksek işlem seviyelerinin kullanılması önerilmez.

2.4 Serileştirilebilir

En yüksek izolasyon seviyesi; işlemler birbirinden tamamen izole edilir, paralel işlemler yokmuş gibi yürütülür. Eşzamanlı işlemler yalnızca bu düzeyde "hayali okuma" etkisine tabi değildir.

2.5 Gerçek DBMS'de işlem izolasyonu için destek

İşlemsel VTYS her zaman dört düzeyin tümünü desteklemez ve ek düzeyler de sunabilir. Yalıtım sağlamada da çeşitli nüanslar vardır.

Bu nedenle, ilke olarak Oracle sıfır seviyesini desteklemez, çünkü işlemlerin uygulanması "kirli okumaları" hariç tutar ve resmi olarak Tekrarlanabilir okuma seviyesinin ayarlanmasına izin vermez, yani yalnızca destekler ( varsayılan olarak) Read committedve Serializable. Aynı zamanda, bireysel komutlar düzeyinde, aslında okuma tekrarlanabilirliğini garanti eder ( SELECTbirinci işlemdeki bir komut veritabanından bir dizi satır seçerse ve bu sırada paralel bir ikinci işlem bu satırlardan bazılarını değiştirirse, o zaman ilk işlem tarafından alınan sonuç kümesi, sanki ikinci işlem yokmuş gibi değiştirilmemiş satırlar içerecektir). READ-ONLYOracle ayrıca , karşılık gelen Serializableancak verileri kendileri değiştiremeyen sözde işlemleri de destekler .

Ve Microsoft SQL Server , dört standart işlem yalıtım düzeyinin tümünü ve ek olarak, işlemin başlatılmadan önce işlenen veri durumunu ve kendi yaptığı değişiklikleri gördüğü SNAPSHOT düzeyini destekler, yani şu şekilde davranır: başlangıçta aldıysa, DB verilerinin bir anlık görüntüsünü alır ve onunla çalışır. Serileştirilmiş'ten farkı, hiçbir kilit kullanılmamasıdır, ancak sonuç olarak, eşzamanlı bir işlem aynı verileri daha önce değiştirmişse değişiklik yapmak mümkün olmayabilir; bu durumda, ikinci işlem yürütülmeye çalışıldığında COMMITbir hata mesajı verir ve iptal edilir.