क्या विदेशी चाबियां गतिरोध पैदा कर सकती हैं और READ COMMITTED SNAPSHOT में बाधा उत्पन्न कर सकती है?


19

यह एक अनुवर्ती प्रश्न है: /programming/7684477/is-it-possible-to-set-transaction-isolation-level-snapshot-automatically

मैं अभी भी ASP.NET अनुप्रयोग में गतिरोध / समयबाह्य स्थिति में हूँ, हालांकि एक साथ बड़ी रिपोर्ट चला रहा हूँ READ_COMMITTED_SNAPSHOT ON

इसलिए मेरे दो सवाल हैं:

  1. अगर ट्रांजैक्शन आइसोलेशन लेवल स्नैपशॉट अपेक्षित / बिल्कुल काम कर रहा है तो मैं कैसे जांच सकता हूं ?
  2. मैं मान रहा हूं कि गतिरोध के लिए विदेशी कुंजियाँ (वेब-एप्लिकेशन की रिपोर्ट-टेबल के लिए) जिम्मेदार हैं। मुझे यह दिलचस्प लेख मिला :

नोट 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

तो यह ट्रिगर आरएमए-टेबल को अपडेट करता है जो अपडेट-ट्रिगर को आग लगाता है (जो समान है)। क्या गतिरोध-ग्राफ मेरी धारणा की पुष्टि करता है? मुझे लगता है कि मैं उन ट्रिगर्स को हटा दूंगा और एक एसपी बनाऊंगा जो दिन में एक बार चल रहा है जो पूरी तरह से पर्याप्त होगा, क्योंकि ये कॉलम केवल एसएसएएस-क्यूब (मोलाप) के लिए हैं।

संपादित करें : वैसे, अब तक कोई गतिरोध नहीं था क्योंकि मैंने इन ट्रिगर्स को हटा दिया :)

जवाबों:


16

अगर SQLCAT टीम कहती है कि FK सत्यापन रीड-कम आइसोलेशन का उपयोग करके किया जाता है, तो उन्हें पता होना चाहिए कि वे किस बारे में बात कर रहे हैं। सत्यापन पर जोर दिया । असली सवाल यह है कि एक रिपोर्ट एफके सत्यापन को ट्रिगर क्यों करेगी ? मान्यता पर होता है लेखन , और रिपोर्ट होने की अपेक्षा की जाती है पढ़ता है । या तो आपकी रिपोर्ट लिखने का कारण बन रही है, जिस स्थिति में स्नैपशॉट अलगाव स्तर कुछ भी मदद नहीं करेगा, या तो गतिरोध का कारण अलग है।

प्रगति करने का एकमात्र तरीका गतिरोध ग्राफ पर कब्जा करना है।

जब तक आप स्नैपशॉट अलगाव के तहत काम नहीं करते हैं, तो दूसरे प्रश्न के लिए कैसे देखें: अंदर देखें sys.dm_tran_active_snapshot_database_transactions


2

विदेशी कुंजी सत्यापन को शुद्धता के लिए प्रतिबद्ध (लॉकिंग) पढ़ा गया है। स्नैपशॉट अलगाव देखें : अखंडता के लिए खतरा? विवरण के लिए ह्यूगो कोर्नेलिस द्वारा।

गतिरोध ग्राफ गतिरोध RM2.dbo.RMAपैदा करने के दो समवर्ती निष्पादन को दर्शाता है । आपके ट्रिगर के बीच RMAऔर शामिल होने की स्थिति याद आ रही है inserted

ऐसा लगता है कि यह एक निरीक्षण है और आपका ट्रिगर दुर्घटनावश सभी पंक्तियों को अपडेट RMAकर रहा है, यदि एक से अधिक समवर्ती ट्रिगर निष्पादन हो तो गतिरोध बहुत अधिक होने की संभावना है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.