1.1 Tanıtım

Ve şimdi eğlence başlıyor - işlemlerin nasıl çalıştığına dair teori. Aynı verileri farklı iş parçacıklarında değiştirdiğinizde sistemin çalışmasını nasıl sağlarsınız? Yoksa bir işlemi diğerinde mi gerçekleştirmek istiyorsunuz? İşlemlerin izolasyonunu inceleyerek bu sorulara cevap aramaya başlayacağız ...

İşlem yalıtım düzeyi, DBMS'de mantıksal olarak paralel işlemlerin yürütülmesi sonucunda tutarsız verilere ne ölçüde izin verildiğini belirleyen koşullu bir değerdir. İşlem yalıtım düzeyleri ölçeği, en düşükten en yükseğe doğru sıralanan bir dizi değer içerir; daha yüksek bir yalıtım düzeyi, daha iyi veri tutarlılığına karşılık gelir, ancak bunun kullanımı, fiziksel olarak paralel işlemlerin sayısını azaltabilir.

Tersine, daha düşük bir izolasyon seviyesi daha fazla paralel işleme izin verir, ancak veri doğruluğunu azaltır. Böylece, bilgi sisteminin geliştiricisi, kullanılan işlem izolasyonu seviyesini seçmek, bir dereceye kadar, iş hızı ile sistemden alınan verilerin garantili tutarlılığını sağlamak arasında bir seçim sağlar.

İşlemleri kullanarak eşzamanlı erişim sorunları

İşlemler paralel olarak yürütüldüğünde, aşağıdaki sorunlar mümkündür:

  • kayıp güncelleme - bir veri bloğu aynı anda farklı işlemlerle değiştirilirse, sonuncusu hariç tüm değişiklikler kaybolur;
  • "kirli" okuma (eng. Kirli okuma) - bir işlem tarafından eklenen veya değiştirilen ve daha sonra onaylanmayacak (geri alınacak) verileri okuma;
  • tekrarlanamaz okuma (eng. tekrarlanamaz okuma) - aynı işlem içinde yeniden okuma yapıldığında, önceden okunan veriler değiştirilir;
  • hayalet okumalar - bir işlem, yürütülmesi sırasında birkaç kez aynı kriterlere göre birçok satırı seçer. Bu getirmeler arasındaki başka bir işlem, ilk işlemin getirme kriterlerinde kullanılan bazı satırların satırlarını ekler veya sütunlarını değiştirir ve başarılı bir şekilde sona erer. Sonuç olarak, ilk işlemdeki aynı seçimlerin farklı satır kümeleri verdiği ortaya çıkacaktır.

Bu sorunların ortaya çıkabileceği durumları göz önünde bulundurun.

1.2 Kayıp güncelleme

Bir veri bloğu aynı anda farklı işlemler tarafından değiştirildiğinde, değişikliklerden birinin kaybolduğu durum.

Aynı anda çalışan iki işlem olduğunu varsayalım:

İşlem 1 İşlem 2
GÜNCELLEME tbl1 AYARLA f2=f2+20 NEREDE f1=1; GÜNCELLEME tbl1 AYARLA f2=f2+25 NEREDE f1=1;

Her iki işlemde de f2 alanının değeri değişir, tamamlandıktan sonra alanın değeri 45 artırılmalıdır. Aslında, aşağıdaki işlem sırası gerçekleşebilir:

  1. Her iki işlem de aynı anda alanın mevcut durumunu okur. Burada tam fiziksel eşzamanlılık gerekli değildir, başka bir işlem sonucunu yazmadan önce sırayla ikinci okuma işleminin tamamlanmış olması yeterlidir.
  2. Her iki işlem de önceden okunan değere sırasıyla 20 ve 25 ekleyerek yeni alan değerini hesaplar.
  3. İşlemler hesaplama sonucunu tekrar f2 alanına yazmaya çalışır. Aynı anda iki yazma işlemi gerçekleştirmek fiziksel olarak imkansız olduğundan, gerçekte yazma işlemlerinden biri daha önce, diğeri daha sonra gerçekleştirilecektir. İkinci yazma işlemi, birincinin sonucunun üzerine yazacaktır.

Sonuç olarak, her iki işlemin tamamlanmasının ardından f2 alanının değeri 45 değil, 20 veya 25 artabilir, yani veri değiştiren işlemlerden biri “kaybolur”.

1.3 "Kirli" okuma

Daha sonra işlenemeyecek (geri alma) bir işlem tarafından eklenen veya değiştirilen verileri okuma.

Aşağıdaki SQL deyimlerini yürüten farklı uygulamalar tarafından açılan iki işlemimiz olduğunu varsayalım:

İşlem 1 İşlem 2
GÜNCELLEME tbl1 AYARLA f2=f2+1 NEREDE f1=1;
tbl1'DEN f2'yi SEÇİN, NEREDE f1=1;
GERİ DÖNÜŞ ÇALIŞMASI;

1. işlemde f2 alanının değeri değiştirilir ve 2. işlemde bu alanın değeri seçilir. Daha sonra 1. işlem geri alınır, sonuç olarak ikinci işlem tarafından alınan değer, veritabanında depolanan değerden farklı olacaktır.

1.4 Tekrarlanamaz okuma

Aynı işlem içinde yeniden okuma yapıldığında, daha önce okunan verilerin değiştirildiği durum.

Aşağıdaki SQL deyimlerini yürüten farklı uygulamalar tarafından açılan iki işlemimiz olduğunu varsayalım:

İşlem 1 İşlem 2
tbl1'DEN f2'yi SEÇİN, NEREDE f1=1;
GÜNCELLEME tbl1 f2=f2+3 AYARLA f1=1;
İŞLEMEK;
tbl1'DEN f2'yi SEÇİN, NEREDE f1=1;

2. işlemde f2 alanının değeri seçilir, ardından 1. işlemde f2 alanının değeri değiştirilir. 2. işlemde f2 alanından tekrar değer seçmeyi denerseniz farklı bir sonuç çıkacaktır. Bu durum, özellikle veriler kısmen değiştirilmek ve veritabanına geri yazılmak üzere okunduğunda kabul edilemez.

1.5 "Hayaletleri" Okumak

Aynı işlem içinde tekrarlanan okuma sırasında aynı seçimin farklı satır kümeleri vermesi durumu.

Aşağıdaki SQL deyimlerini yürüten farklı uygulamalar tarafından açılan iki işlem olduğunu varsayalım:

İşlem 1 İşlem 2
tbl1'DEN TOPLAM(f2) SEÇİN;
tbl1 (f1,f2) DEĞERLERİNE EKLE(15,20);
İŞLEMEK;
tbl1'DEN TOPLAM(f2) SEÇİN;

İşlem 2, f2 alanının tüm değerlerini kullanan bir SQL deyimi yürütür. Ardından, işlem 1'e yeni bir satır eklenir ve işlem 2'deki SQL ifadesinin yeniden yürütülmesinin farklı bir sonuç üretmesine neden olur. Bu duruma fantom okuma (fantom okuma) denir. Tekrarlanan veri erişiminin sonucunun, verinin kendisinin değişmesi/silinmesi nedeniyle değil, yeni (hayali) verilerin ortaya çıkması nedeniyle değişmesiyle, tekrarlanamayan okumadan farklıdır.