2008-11-26 17 views
5

पर अद्यतन क्वेरी पर पेज स्तर पर डेडलॉक को कम करें, मेरे पास डिफ़ॉल्ट रूप से "पढ़ा गया" लेनदेन के तहत, एक फ्लैट सादे तालिका पर, एक बेवकूफ सरल SQL अद्यतन क्वेरी के कारण कुछ मजेदार डेडलॉक है।एमएस एसक्यूएल

अद्यतन तालिका सेट कॉलम = @ पी 1 जहां पीके = @ पी 2; जबकि पीके वर्कर (11), पर क्लस्टर्ड इंडेक्स है। तालिका पर कोई ट्रिगर या टेबल संबंध..एटीसी नहीं।

मैंने कुछ जांच की और पाया कि डेडलॉक "पृष्ठ" स्तर पर होता है, न कि ROW/रिकॉर्ड स्तर पर। फिर, मुझे लगता है कि प्रत्येक अद्यतन क्वेरी के लिए, इसमें 100 (और अधिक) पृष्ठ ताले लगते हैं। (यह मुझे समझ में नहीं आता है क्योंकि मैं एक बार में एक पंक्ति अद्यतन कर रहा हूं)

क्या डेडलॉक होने से रोकने का कोई तरीका है? या, कर्सर का उपयोग किये बिना एक एकल पंक्ति अद्यतन के लिए लॉक की संख्या को कैसे कम किया जा सकता है?

-

आपके सुझाव के लिए धन्यवाद।

मैंने उच्च और निम्न भरने वाले कारक के साथ इंडेक्स को कुछ बार पुनर्निर्माण करने की कोशिश की थी। मैंने प्रक्रियाओं को अलग-अलग स्थिति/टुकड़ा अपडेट करने की कोशिश की थी। लेकिन कुछ भी बेहतर या खराब नहीं हुआ।

-

मैं एसक्यूएल सर्वर प्रोफाइलर की कोशिश की। मैंने कुछ "लॉक: डेडलॉक चेन" और "लॉक: डेडलॉक", पर कब्जा कर लिया लेकिन कोई "डेडलॉक ग्राफ" कब्जा नहीं किया गया था। दोनों तरफ पढ़ा गया, ऑटो-प्रतिबद्ध मोड पढ़ने में सरल अपडेट क्वेरी कर रहे हैं।

Lock:Deadlock Chain 17887475 1  0X01 4 myserver  2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                 0   971497 102 - Resource type Exchange     Lock:Deadlock Chain 17887476 1  0X01 4 myserver  2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:438102                                                               265006271  0 0X56AF060001000000000000001B0006  27    0 - LOCK 4 - U   0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock     
Lock:Deadlock Chain 17887477 1  0X01 4 myserver  2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                 0   971497 102 - Resource type Exchange     Lock:Deadlock Chain 17887478 1  0X01 4 myserver  2008-11-28 10:16:46.210 Deadlock Chain SPID = 54 1:426206                                                               265006240  0 0XDE80060001000000000000001B0006  27    0 - LOCK 4 - U   0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock     
Lock:Deadlock Chain 17887479 1  0X01 4 myserver  2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:426206                                                               265006271  0 0XDE80060001000000000000001B0006  27    0 - LOCK 4 - U   0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock     
Lock:Deadlock Chain 17887480 1  0X01 4 myserver  2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                 0   971497 102 - Resource type Exchange     Lock:Deadlock Chain 17887481 1  0X01 4 myserver  2008-11-28 10:16:46.210 Deadlock Chain SPID = 54 1:426066                                                               265006240  0 0X5280060001000000000000001B0006  27    0 - LOCK 4 - U   0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock     
Lock:Deadlock Chain 17887482 1  0X01 4 myserver  2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:426066                                                               265006271  0 0X5280060001000000000000001B0006  27    0 - LOCK 4 - U   0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock     
Lock:Deadlock Chain 17887483 1  0X01 4 myserver  2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                 0   971497 102 - Resource type Exchange     Lock:Deadlock Chain 17887484 1  0X01 4 myserver  2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:425614                                                               265006271  0 0X8E7E060001000000000000001B0006  27    0 - LOCK 4 - U   0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock     
Lock:Deadlock Chain 17887485 1  0X01 4 myserver  2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                 0   971497 102 - Resource type Exchange     Lock:Deadlock Chain 17887486 1  0X01 4 myserver  2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:426687                                                               265006271  0 0XBF82060001000000000000001B0006  27    0 - LOCK 4 - U   0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock     
Lock:Deadlock Chain 17887487 1  0X01 4 myserver  2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                 0   971497 102 - Resource type Exchange     
Lock:Deadlock Chain 17887488 1  0X01 4 myserver  2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:425392                                                               265006271  0 0XB07D060001000000000000001B0006  27    0 - LOCK 4 - U   0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock     
Lock:Deadlock Chain 17887489 1  0X01 4 myserver  2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                 0   971497 102 - Resource type Exchange     
Lock:Deadlock Chain 17887491 1  0X01 4 myserver  2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                 0   971497 102 - Resource type Exchange     
Lock:Deadlock Chain 17887493 1  0X01 4 myserver  2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                 0   971497 102 - Resource type Exchange     
Lock:Deadlock Chain 17887494 1  0X01 4 myserver  2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:435792                                                               265006271  0 0X50A6060001000000000000001B0006  27    0 - LOCK 4 - U   0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock     
Lock:Deadlock Chain 17887495 1  0X01 4 myserver  2008-11-28 10:16:46.210 Parallel query worker thread was involved in a deadlock                 0   971497 102 - Resource type Exchange     
Lock:Deadlock Chain 17887496 1  0X01 4 myserver  2008-11-28 10:16:46.210 Deadlock Chain SPID = 209 1:438206                                                               265006271  0 0XBEAF060001000000000000001B0006  27    0 - LOCK 4 - U   0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971497 101 - Resource type Lock     
Lock:Deadlock 17887497  myuser 0XCD85FBB269700B4AA2F4E8579D118999 209 myserver myuser 2008-11-28 10:16:45.930 1:426206 265006271 myapps 0 0XDE80060001000000000000001B0006 123 27 281 2008-11-28 10:16:46.210 myclient 0 - LOCK 4 - U   0 72057594040352768 1 - TRANSACTION 0 6 - PAGE mydatabase 971498     

उत्तर

0

मुझे अंततः संग्रहीत प्रक्रिया में cusror का उपयोग करके एक समाधान करना है।

लेकिन यह अभी भी दिलचस्प है कि पेज लॉक कैसे होता है और कैसे हल किया जाए।


गूगल पर कुछ और खोज के बाद, वहाँ कुछ अन्य लोगों को एक ही समस्या है और वे (MSDN मंच से) SQL सर्वर 2005 में समानांतरवाद बंद करने के लिए सुझाव है, लेकिन मैं कभी नहीं की कोशिश करने का मौका मिलता है कर रहे हैं।

3

आप 2 विकल्प लॉक वृद्धि को कम करने के लिए है:

1) को अधिक स्पष्टता के ताले लेने के लिए एसक्यूएल सर्वर पूछने के लिए के साथ (चप्पू-आंकड़ा) संकेत जोड़ने (अपने लाभ भिन्न हो सकते हैं:

(चप्पू-आंकड़ा) के साथ

अद्यतन तालिका सेट स्तंभ = @ P1 जहां पी = @ P2;।। पी varchar (11), यह कोई Tigger या तालिका मेज पर relation..etc पर एक क्लस्टर सूचकांक है जबकि

+०१२३५१६४१०

2) एक यादृच्छिक क्रम में पंक्तियों को अद्यतन करें, जो पृष्ठ ताले में पंक्ति ताले की वृद्धि को कम करने की संभावना को कम करता है।

इसके अलावा, यह सुनिश्चित करना कि उस तालिका पर इंडेक्स अद्यतित हैं अक्सर लॉकिंग को कम कर सकते हैं। यदि आप बहुत सारे आवेषण करने जा रहे हैं तो एक भरने का कारक छोड़कर (9 0 अच्छा है)।

0

सामान्य, सामान्य मामले में इस प्रकार के सलाहकार को अक्सर नहीं देखा जाता है। मेरा सवाल यह है कि: इस लेनदेन के 'दूसरी तरफ' क्या है? अन्य अद्यतन कथन क्या चल रहा है और इस डेडलॉक का कारण बन रहा है? मुझे लगता है कि, इस समस्या का निदान करने की कुंजी होगी। ईमानदारी से, मेरा पैसा इस पर है, पहले अज्ञात प्रश्न अपराधी है। और मैं अब वेगास में हूं ...

+0

यह सबसे अजीब हिस्सा है, दूसरी तरफ एक और प्राथमिक कुंजी पूरी तरह से एक ही क्वेरी करते हैं। –

+0

और मैं यह भी सुनिश्चित करने के लिए डिस्कनेक्ट/रीकनेक्ट करता हूं कि कोई छुपा लॉक/लेनदेन नहीं है। –

1

क्या आपने कोई प्रोफ़ाइल ट्रेस चलाया है?

आग अप एसक्यूएल प्रोफाइलर और इन घटनाओं के साथ एक मानक का पता लगाने बनाने कहा:

  • ताले: डेडलॉक ग्राफ़
  • ताले: लॉक: डेडलॉक चेन
  • ताले: लॉक: वृद्धि

चाहिए गतिरोध की सटीक प्रकृति का ब्यौरा उपलब्ध कराना चाहिए।

0

अद्यतन बयान से पहले ही लेन-देन के अंदर क्या चयन बयान एक ही मेज और एक ही रिकॉर्ड से आते हैं? इन चयनों में लॉकिंग संकेतों का उपयोग करें (अपडेट करें)।

+0

कुछ भी नहीं है (पुनः कनेक्ट होने) या Pk से एक और सरल चयन करें क्वेरी। मैंने पहले "साथ (अपडेटलॉक)" जोड़ने की कोशिश की है, इसमें "पंक्ति" अपडेट लॉक है, लेकिन यह अद्यतन क्वेरी में किसी भी "पेज" लॉक को कम नहीं कर सकता है। –

0

आप किसी भी अद्यतन मेज पर चलाता है क्या ज़रूरत है? यदि ऐसा है, तो ट्रिगर की कार्रवाई, आपके डेडलॉक का कारण बन सकती है।

+0

नहीं। यह एक सादा टेबल है। कोई विदेशी कुंजी नहीं कोई ट्रिगर नहीं –

संबंधित मुद्दे