Yabancı anahtarlar kilitlenmelere neden olabilir ve TAAHHÜŞ SNAPSHOT'U OKUYUN?


19

Bu, şu adresten bir takip sorusudur: /programming/7684477/is-it-possible-to-set-transaction-isolation-level-snapshot-automatically

Yine de büyük raporlar aynı anda çalışırken ASP.NET uygulamasında kilitlenme / zaman aşımı durumları yaşıyorum READ_COMMITTED_SNAPSHOT ON.

İki sorum var:

  1. İşlem Yalıtım Düzeyi Anlık Görüntüsünün beklendiği gibi çalışıp çalışmadığını nasıl kontrol edebilirim ?
  2. Yabancı anahtarların (rapor tablolarına Web-Uygulama tablolarında) çıkmazlardan sorumlu olduğunu varsayıyorum. Bu ilginç makaleyi buldum :

Not İşlem tamamlanmış anlık görüntü (satır sürümlendirme kullanılarak kaydedilmiş okuma) veya anlık görüntü yalıtım düzeyi kullanıyor olsa bile, yabancı anahtarlar doğrulanırken SQL Server paylaşılan kilitler alır. Bu işlem yalıtım düzeyleri kullanıldığında işlemlerden çıkma grafiklerini incelerken buna dikkat edin. Paylaşılan kilitler görürseniz, kilitlerin yabancı anahtarla başvurulan bir nesneye alınıp alınmadığını kontrol edin.

FK'nin Deadlock / Timeout durumlarından gerçekten sorumlu olup olmadığını nasıl kontrol edebilirim, bu, kilitlenmeleri önlemek için bu yabancı anahtarları silebileceğim anlamına mı geliyor (kabul edilebilir bir çaba ne olurdu)?

Not : Sadece çıkmazlara neden olan tablolardan okuyorum.

Bu konuyla ilgili düşünceler büyük beğeni topluyor.


Burada Düzenle , bir Deadlock Grafiğidir . Belki birisi kilitlenmeye neyin sebep olduğunu anlamama yardımcı olabilir. İki işlem aynı tabloyu yazmak istediğinde (bir güncelleme ve bir ek, ekin Saklı Yordam olduğu gibidir), yalnızca web uygulamasının neden olduğu raporlar olmadan gerçekleştiği görülmektedir. Neden sayfa kilitlerini alıyor ve yalnızca satır kilitlerini nasıl etkinleştiriyorsunuz? Insert-SP zaten kullanıyor TRANSACTION ISOLATION LEVEL REPEATABLE READ.

İki tetikleyicinin (bir güncelleme ve bir ekleme) çıkmazlardan sorumlu olduğuna dair güçlü bir şüphem var. İşte ekleme tetikleyici:

CREATE TRIGGER [dbo].[CreateRMAFiDates] 
   ON  [dbo].[RMA] 
   AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    UPDATE RMA 
    SET [fiCreationDate]=(SELECT idDate FROM tdefDate 
        WHERE CONVERT(VARCHAR, INSERTED.Creation_Date, 112) = tdefDate.Text),
        [fiPopDate]=(SELECT idDate FROM tdefDate 
        WHERE CONVERT(VARCHAR, INSERTED.POP_Date, 112) = tdefDate.Text),
        [fiManufactureDate]=(SELECT idDate FROM tdefDate 
        WHERE CONVERT(VARCHAR, INSERTED.Manufacture_Date, 112) = tdefDate.Text)
    FROM INSERTED;
END

Bu tetikleyici, güncelleme tetikleyicisinin tetiklenmesine neden olan (benzer olan) RMA Tablosunu günceller. Kilitlenme grafiği varsayımımı doğrular mı? Bu sütunları yalnızca SSAS-Cube (Molap) için olduğu için bu tetikleyicileri silip günde bir kez çalışan bir SP oluşturacağımı düşünüyorum.

Düzenleme : Bu arada, bu tetikleyicileri sildiğimden beri artık kilitlenme olmadı :)

Yanıtlar:


16

SQLCAT ekibi FK doğrulamasının okunmuş izolasyon kullanılarak yapıldığını söylüyorsa, neden bahsettiklerini bilmeleri gerekir. Vurgu doğrulama . Asıl soru şu: Bir rapor neden FK doğrulamasını tetikleyecek ? Doğrulama üzerinde meydana yazıyor ve raporlar olması gerekiyordu okur . Raporlarınız yazma işlemlerine neden oluyor, bu durumda anlık görüntü yalıtım düzeyleri hiçbir işe yaramayacak, ya da kilitlenmenin nedeni farklı.

İlerlemenin tek yolu çıkmaz grafiği yakalamaktır.

Diğer soruya gelince, anlık görüntü yalıtımı altında çalışıp çalışmadığınızı nasıl kontrol edebilirsiniz: bakın sys.dm_tran_active_snapshot_database_transactions.


2

Yabancı anahtar doğrulama vardır doğruluğundan işlenen okuma (kilitleme) altında gerçekleşmesi. Bkz Anlık izolasyon: bütünlüğü için bir tehdit mi?detaylar için Hugo Kornelis tarafından hazırlanmıştır.

Kilitlenme grafiği, RM2.dbo.RMAkilitlenmeye neden olan iki eşzamanlı yürütmeyi gösterir . Sizin tetikleyiciler bir arasındaki birleşim koşulu eksik RMAveinserted .

Bunun bir gözetim olduğu ve tetikleyicinizin yanlışlıkla tüm satırları güncellediği görülüyor, bu RMAnedenle birden fazla eşzamanlı tetikleme yürütmesi varsa kilitlenme meydana gelmesi son derece olasıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.