Yalıtım düzeylerini açıklama

Tamamlandı

PostgreSQL üç tür eşzamanlılık çakışmasını, kirli okumaları, yinelenemeyen okumaları ve hayalet okumaları engelleyen iki işlem yalıtımı düzeyine sahiptir.

Eşzamanlılık çakışması türleri

Kirli okumalar

Bir işlem, başka bir işlemin düzenlediği güncelleştirilmiş veri sürümünü okuduğunda kirli bir okuma oluşur. Ancak bu güncelleştirme hiçbir zaman işlenmez.

Örneğin, bir işlem, hesabın bakiyesini sıfırdan küçük bir hesap olarak alacak bir tasarruf hesabında gerçekleşir. İşlem işlenmeden önce hesap bakiyesi denetlenır ve tasarruf hesaplarının bakiyesinin sıfırdan küçük olmasına izin verilmediğinden işlem geri alınır. Aynı zamanda, tüm tasarruf hesaplarının geçerli bakiyesini göstermek için bir rapor çalıştırılıyor. Kirli okumalara izin verilirse, hiçbir zaman işlememesine rağmen negatif bakiye döndürülür.

Yinelenemeyen okumalar

Bir işlem verileri okursa, başka bir işlem verileri güncelleştirirse ve ilk işlem verileri yeniden okur ve yeni güncelleştirmeleri görürse yinelenemez bir okuma gerçekleşir.

Örneğin, A Bağlan bir işlem başlatır ve bir siparişin birim başına maliyetini ve birim sayısını okur. Bu, 10 maliyeti ve 3 birim sayısıdır. Bağlan ion B daha sonra başka bir işlem başlatır ve birim başına maliyeti 12 olarak ayarlamak için aynı siparişi güncelleştirir. Özgün sorguyla aynı işlemde, Bağlan A siparişin toplam maliyetini hesaplar. Tekrarlanamayan okumalara izin Bağlan A, birim başına maliyeti 10 birim, birim sayısı 3 ve toplam maliyeti 36 olarak döndürür; bu açıkça mantıklı değildir.

Hayalet okumaları

Bir işlem verileri okursa, başka bir işlem verilere yeni bir satır (veya satır) eklerse ve ilk işlem verileri yeniden okur ve yeni güncelleştirmeleri görürse hayalet okuma gerçekleşir.

Örneğin, A Bağlan bir işlem başlatır ve Paris'teki günün toplam fatura sayısını sayar. Sayı, Paris'teki 10 mağazanın tamamı için toplam 1.100 faturadır. Bağlan ion B daha sonra başka bir işlem başlatır ve Yeni mağazanın açılış günü için 200 fatura ile Paris'te yeni bir perakende mağazası ekler. Bağlan ion A işleminde sistem artık mağaza başına fatura sayısını hesaplamak için mağaza sayısını sayar. A Bağlan 1.100 işlemi, fatura sayısı sorgusunu çalıştırdığınızda var olan özgün 10 yerine 11 depoya böler. Yeni mağazanın ortalama hesaplamasında bir işlemin hesaba eklemediği 200 fatura Bağlan rağmen, bu hesaplama artık yanlış ortalama 100 döndürür.

Yalıtım düzeyleri

PostgreSQL için Azure Veritabanı üç işlem yalıtım düzeyi vardır: okundu, yinelenebilir okuma ve seri hale getirilebilir. Okunmamış okuma PostgreSQL için Azure Veritabanı kullanılamaz.

Yalıtım düzeyleri eşzamanlılık çakışmalarını nasıl etkiler:

Yalıtım düzeyi Kirli okuma Yinelenemeyen okuma Hayalet okuma
Okunmamış okuma* Mümkün Mümkün Mümkün
Okundu Mümkün değil Mümkün Mümkün
Yinelenebilir okuma Mümkün değil Mümkün değil Mümkün
Serileştirilebilir Mümkün değil Mümkün değil Mümkün değil

* PostgreSQL'de kullanılamaz

Tamamlanan okuma, PostgreSQL için Azure Veritabanı varsayılan yalıtım düzeyidir. İyi bir performans sağlarken kirli okumaları önlediğinden, işlenen okuma çoğu senaryo için en uygun olandır. Yinelenemeyen okumalar ve hayalet okumalar olabilir, ancak bu koşullar yalnızca aynı verileri eşzamanlı olarak sorgulayan birden çok SELECT deyimi varsa ortaya çıkabilir.

Başka bir işlem, işlemin iki SELECT deyiminin yürütülmesi arasındaki satırları güncelleştirse bile işlem içindeki birden çok SELECT deyimi aynı sonuçları göreceğinden, yinelenebilir okuma işlemi yapılan okuma işleminden farklıdır. Başka bir işlem yeni satır eklerse, bu satırlar ikinci SELECT deyiminin sonuçlarında görünmez.

Seri hale getirilebilir yalıtım düzeyi, en yüksek işlem yalıtımı düzeyini sağlar ve farklı işlemler seri olarak, yani ardı ardına çalışıyor gibi gerçekleştirir. Seri hale getirilebilir yalıtım düzeyinin dezavantajı, bir işlem güncelleştirme gerçekleştiriyorsa diğer işlemlerin bunu engelleyebilecek olmasıdır. Seri hale getirilebilir işlemin, engelleme işlemi tamamlanana kadar beklemesi gerekir ve bu da performansı etkiler.

Seri hale getirilebilir işlemler, seri hale getirilebilir işlem sırasında diğer işlemlerin değiştirebileceği hiçbir satırda değişiklik yapamaz. Bu çakışma biçimi oluşursa, bir hata iletisi döndürülür ve bu nedenle seri hale getirilebilir işlemler kullanıldığında uygulamalarda yeniden deneme mantığının yerleşik olması önemlidir.

İşlem yalıtım düzeylerini güncelleştirmek için bir işlem içinde TRANSACTION ISOLATION LEVEL komutunu kullanın.

Örneğin:

BEGIN TRANSACTION
TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SELECT * FROM humanresources.department
COMMIT;