Yalıtım düzeylerini anlama

JDBC sürücüsünü indirin

İşlemler, bir işlemin diğer işlemlerden nasıl yalıtıldığını tanımlayan bir yalıtım düzeyi belirtir. Yalıtım, farklı işlemler tarafından yapılan kaynak veya veri değişikliklerinin ayrılmasıdır. Yalıtım düzeyleri, kirli okumalar veya hayalet okumalar gibi eşzamanlılık yan etkilerine izin verilen durumları tanımlar.

İşlem yalıtım düzeyleri aşağıdaki etkileri denetler:

  • Veriler okunurken kilitlerin alınıp alınmayacağı ve ne tür kilitlerin istendiği.

  • Okuma kilitlerinin ne kadar süre tutulduğu.

  • Başka bir işlem tarafından değiştirilen satırlara başvuran okuma işlemlerinin olup olmadığı:

    • Satırdaki özel kilit serbest olana kadar bekleyin.

    • İfadenin veya işlemin başladığı sırada var olan satırın kaydedilmiş sürümünü alın.

    • Kaydedilmemiş veri değişikliğini okuyun.

Yalıtım düzeyi seçme

İşlem yalıtım düzeyinin seçilmesi, veri değişikliklerini korumak için alınan kilitleri etkilemez. Bir işlem her zaman değiştirdiği herhangi bir veri üzerinde özel bir kilit alır. İşlem tamamlanana kadar, bu işlem için ayarlanan yalıtım düzeyi ne olursa olsun bu kilidi tutar. Okuma işlemleri için, işlem yalıtım düzeyleri esas olarak işlemin diğer işlemlerin etkilerinden nasıl korunduğunu tanımlar.

Daha düşük yalıtım düzeyi, birçok kullanıcının aynı anda verilere erişme becerisini artırır. Ancak, kullanıcıların görebileceği kirli okumalar veya kayıp güncelleştirmeler gibi eşzamanlılık etkilerinin sayısını artırır. Buna karşılık, daha yüksek bir yalıtım düzeyi, kullanıcıların görebileceği eşzamanlılık etkisi türlerini azaltır. Ancak daha fazla sistem kaynağı gerektirir ve bir işlemin diğerini engelleme olasılığını artırır. Uygun yalıtım düzeyinin seçilmesi, uygulamanın veri bütünlüğü gereksinimlerini her yalıtım düzeyinin yüküne göre dengelemeye bağlıdır.

Seri hale getirilebilir en yüksek yalıtım düzeyi, bir işlemin bir okuma işlemini her yinelediğinden tam olarak aynı verileri almasını garanti eder. Ancak, çok kullanıcılı sistemlerdeki diğer kullanıcıları etkileyebilecek bir kilitleme düzeyi kullanır. En düşük yalıtım düzeyi olan okunmamış veriyi okuma, diğer işlemler tarafından değiştirilmiş ancak işlenmemiş verileri alabilir. Tüm eşzamanlılık etkileri 'read uncommitted' durumunda gerçekleşebilir, ancak okuma kilitleme veya sürüm oluşturma yoktur, bu nedenle çalışma maliyeti en aza indirilir.

Açıklamalar

Aşağıdaki tabloda, farklı yalıtım düzeylerinin izin verdiği eşzamanlılık yan etkileri gösterilmektedir.

Yalıtım Düzeyi Kirli Okuma Yinelenemeyen Okuma Phantom
Okunmamış Verileri Okuma Yes Yes Yes
Okundu Hayı Yes Yes
Yinelenebilir okuma Hayı Hayı Yes
Anlık Görüntü Hayı Hayı Hayı
Serileştirilebilir Hayı Hayı Hayı

her biri aynı satırı alan iki işlem olduğunda oluşabilecek güncelleştirmelerin kaybolmasını önlemek için işlemler en az yinelenebilir okuma yalıtım düzeyinde çalıştırılmalıdır. İşlem daha sonra satırı başlangıçta alınan değerlere göre güncelleştirir. İki işlem, satırları tek bir UPDATE deyimi kullanarak güncelleştiriyor ve güncelleştirmeyi daha önce alınan değerlere dayandırmıyorsa, read committed varsayılan yalıtım düzeyinde güncelleştirme kaybı oluşamaz.

Bir işlemin yalıtım düzeyini ayarlamak için SQLServerConnection sınıfının setTransactionIsolation yöntemini kullanabilirsiniz. Bu yöntem, aşağıdaki gibi bağlantı sabitlerinden birini temel alan bağımsız değişkeni olarak bir int değeri kabul eder:

con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

SQL Server'ın yeni anlık görüntü yalıtım düzeyini kullanmak için sabitlerden SQLServerConnection birini kullanabilirsiniz:

con.setTransactionIsolation(SQLServerConnection.TRANSACTION_SNAPSHOT);

veya şunu kullanabilirsiniz:

con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED + 4094);

SQL Server yalıtım düzeyleri hakkında daha fazla bilgi için bkz. SQL Server Books Online'da "Veritabanı Altyapısında Yalıtım Düzeyleri".

Ayrıca bakınız

JDBC sürücüsüyle işlem gerçekleştirme
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)