यह एक अनुवर्ती प्रश्न है: /programming/7684477/is-it-possible-to-set-transaction-isolation-level-snapshot-automatically
मैं अभी भी ASP.NET अनुप्रयोग में गतिरोध / समयबाह्य स्थिति में हूँ, हालांकि एक साथ बड़ी रिपोर्ट चला रहा हूँ READ_COMMITTED_SNAPSHOT ON
।
इसलिए मेरे दो सवाल हैं:
- अगर ट्रांजैक्शन आइसोलेशन लेवल स्नैपशॉट अपेक्षित / बिल्कुल काम कर रहा है तो मैं कैसे जांच सकता हूं ?
- मैं मान रहा हूं कि गतिरोध के लिए विदेशी कुंजियाँ (वेब-एप्लिकेशन की रिपोर्ट-टेबल के लिए) जिम्मेदार हैं। मुझे यह दिलचस्प लेख मिला :
नोट SQL सर्वर विदेशी कुंजियों को मान्य करते समय साझा किए गए ताले को प्राप्त करता है, भले ही लेनदेन पढ़े हुए स्नैपशॉट का उपयोग कर रहा हो (पंक्ति संस्करण का उपयोग करके प्रतिबद्ध) या स्नैपशॉट अलगाव स्तर। जब लेन-देन के अलगाव के स्तर का उपयोग किया जाता है तो लेन-देन से गतिरोध रेखांकन की जांच करते समय इसका ध्यान रखें। यदि आप साझा किए गए ताले देखते हैं, तो यह देखने के लिए जांचें कि क्या ताले को किसी विदेशी कुंजी द्वारा संदर्भित ऑब्जेक्ट पर लिया गया है।
अगर एफके डेडलॉक / टाइमआउट स्थितियों के लिए वास्तव में ज़िम्मेदार है, तो मैं कैसे जांच कर सकता हूं, क्या इसका मतलब है कि मैं गतिरोध को रोकने के लिए उन विदेशी कुंजियों को हटा सकता हूं (क्या एक स्वीकार्य प्रयास होगा)?
नोट : मैं केवल उन तालिकाओं से पढ़ रहा हूं जो गतिरोध का कारण हैं।
इस विषय पर किसी भी विचार बहुत सराहना की है।
यहाँ संपादित करें एक डेडलॉक-ग्राफ है । शायद कोई मुझे समझने में मदद कर सकता है कि गतिरोध का कारण क्या है। ऐसा लगता है कि यह बिना किसी रिपोर्ट के केवल वेब-एप्लिकेशन के कारण चल रहा है, जब दो लेन-देन एक ही तालिका (एक अद्यतन और एक सम्मिलित करना चाहते हैं, तो प्रविष्टि संग्रहित-प्रक्रिया के रूप में होती है)। यह एक्वायर पेज लॉक क्यों करता है और केवल पंक्ति लॉक को कैसे सक्षम किया जाता है? इन्सर्ट-एसपी पहले से ही उपयोग करता है TRANSACTION ISOLATION LEVEL REPEATABLE READ
।
मुझे एक मजबूत संदेह है कि गतिरोध के लिए दो ट्रिगर (एक अद्यतन और एक सम्मिलित) जिम्मेदार हैं। यहाँ इन्सर्ट-ट्रिगर है:
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
तो यह ट्रिगर आरएमए-टेबल को अपडेट करता है जो अपडेट-ट्रिगर को आग लगाता है (जो समान है)। क्या गतिरोध-ग्राफ मेरी धारणा की पुष्टि करता है? मुझे लगता है कि मैं उन ट्रिगर्स को हटा दूंगा और एक एसपी बनाऊंगा जो दिन में एक बार चल रहा है जो पूरी तरह से पर्याप्त होगा, क्योंकि ये कॉलम केवल एसएसएएस-क्यूब (मोलाप) के लिए हैं।
संपादित करें : वैसे, अब तक कोई गतिरोध नहीं था क्योंकि मैंने इन ट्रिगर्स को हटा दिया :)