Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 12282|Yanıt: 0

[Kaynak] SQL Server, işlem izolasyon seviyesini belirler

[Bağlantıyı kopyala]
Yayınlandı 5.02.2021 11:53:34 | | | |
Entity Framework Sorgu Optimizasyonu WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html

Veritabanı kilitleri NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX
https://www.itsvse.com/thread-9519-1-1.html
SQL Server'daki işlemlerin izole seviyesi ve bunların kirli okumalar, tekrarlanmayan okumalar, hayali okumalar vb. (kod argümanları ve zaman dizileri gibi) ile ilişkisi.

Veritabanına eşzamanlı erişim durumunda ortaya çıkabilecek bu sorunları anlarak, veritabanı izolasyon seviyesi kavramını daha iyi anlamaya devam edebiliriz: eşzamanlı işlemleri nasıl izole etmek istersiniz ve ne ölçüde olur? Örneğin, kirli okumalar tolere edilebiliyorsa veya eşzamanlı işlemlerin kirli okuma olmasını istemiyorsanız, bunlar izolasyon seviyesine ayarlanabilir ve eşzamanlı işlemler arasındaki izolasyon gevşek veya ciddi hale getirilebilir.

İzolasyon seviyesi ne kadar yüksekse, kirli veya eksik veri okuma olasılığı o kadar düşüktür, ancak yüksek eşzamanlılık sistemlerinde performans bozulması o kadar şiddetlidir. İzolasyon seviyesi ne kadar düşükse, eşzamanlı sistemde performans artışı o kadar büyük olur, ancak veri eksik olabilir.

SQL Server 2012'de, bir işlemin izolasyon seviyesini (düşükten yükseke) şu sözdizimi kullanarak ayarlayabilirsiniz:

IŞLEM IZOLASYON SEVIYESINI AYARLAYIN
    { OKU KARARSIZ
    | OKUMA TAAHHÜDÜ
    | TEKRARLANABILIR OKUMA
    | ANLIK GÖRÜNTÜ
    | SERILEŞTIRILEBILIR
    }
[ ; ]
Öncelikle, yeni bir test betiği oluşturun, bir veritabanı oluşturun ve test verisini aşağıdaki gibi ekleyin:



Yeni bir pencere A oluşturun, bir işlem aç, güncelleme işlemini gerçekleştirir ve commit yapmadan önce 10 saniye beklerken, kod şu şekildedir:

Yeni bir pencere B oluşturun, işlemi READ UNCOMMITTED (taahhüt edilmemiş okuma, en düşük seviye, kolay sorun kirli okumadır, çünkü diğer işlemler tarafından değiştirilen verileri okuyabilir ancak taahhüt edilmemiştir.) Bir işlemde SELECT ifade nesne tablosunda (NOLOCK) ayarlamakla aynı şeyi yapar. Verileri sorgulayınca, kod aşağıdaki gibidir:

Yeni bir C penceresi oluşturun, veriyi doğrudan sorgulayın, aşağıdaki gibi:

Karşılığında,A, B ve C pencerelerini çalıştırın ve veri güncellerken, pencere B'nin hemen veriyi döndürebileceğini görün (Okumanın kirli veri olması mümkün), C penceresi A penceresinin yürütülmesini beklemesi gerekiyoraşağıdaki şekilde gösterildiği gibi verileri döndürecektir:


(Pencere B)


(Pencere C)

(Son)





Önceki:RDB ile AOF arasındaki Redis Sürekliliği Farkı
Önümüzdeki:MySQL, sorgu sonuçlarını bir dosyaya dışa aktarır
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com