Eşzamanlılık ve izolasyon
Locking ve blocking
Beklemek ile deadlock aynı şey değildir.
Kavramı anlayalım
Lock verinin eşzamanlı kullanımını koordine eder. Shared, update ve exclusive kilitler uyumluluk kurallarıyla çalışır. Blocking, bir oturumun başka oturumun kilidini beklemesidir; kısa beklemeler normal olabilir. Uzun transaction’lar, geniş güncellemeler veya eksik erişim yolları beklemeyi büyütebilir.
Lock ile latch farklıdır: latch iç bellek yapısını korur. NOLOCK “kilit yok” demek değildir; dirty read, eksik veya iki kez okunan satır gibi tutarsızlıklara izin verebilir ve schema lock beklemesini ortadan kaldırmaz. Finansal raporda hız uğruna doğruluğu kaybetme. Sorun çözümünde blocker, transaction süresi, sorgu ve plan birlikte incelenir. KILL komutu yerine önce etki ve rollback maliyeti değerlendirilir.
Eşzamanlı erişimde doğruluk ve gecikmeyi dengelemek için.
Her sorguya NOLOCK eklemek.
Aynı konu. Üç farklı derinlik.
SELECT @@SPID AS SessionId;Kendi oturum kimliğini öğren.
Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.
Önce kendin dene.
Kendi bağlantının açık transaction sayısını öğren.
Çözümü ve açıklamasını göster
SELECT @@SPID AS SessionId, @@TRANCOUNT AS OpenTransactions;Bitmiş örneklerden sonra OpenTransactions sıfır olmalıdır.