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:
- İş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 ?
- 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ı :)