मैं वर्तमान में SQL सर्वर 2008 डेटाबेस पर कुछ प्रयोग कर रहा हूं।एसक्यूएल सर्वर 2008: डेडलॉक्स प्राप्त करना ... किसी भी ताले के बिना
UPDATE from Table A where rowID='123'
हालांकि, मैं गतिरोध त्रुटियों की एक टन हो रही है (: अधिक विशेष रूप से, मैं एक JDBC आवेदन समवर्ती धागे के सैकड़ों का उपयोग करता है कार्य के हजारों निष्पादित करने के लिए, जिनमें से प्रत्येक डेटाबेस पर निम्न क्वेरी चलाता है एसक्यूएल अपवाद 1205) जब भी मैं अलगाव स्तर को READ_UNCOMMITTED से अधिक होने के लिए सेट करता हूं। यह तब भी होता है जब मैं पंक्ति लॉकिंग, टेबल लॉकिंग और अनन्य लॉक संकेत सेट करता हूं! और स्नैपशॉट अलगाव में भी, जो ताले का उपयोग नहीं करता है, मुझे अभी भी डेडलॉक त्रुटियां मिलती हैं।
जब ऐसा होता है तो मैं डेडलॉक ग्राफ प्राप्त करने के लिए एसक्यूएल प्रोफाइलर के माध्यम से एक ट्रेस चलाता था, लेकिन इसका अधिक उपयोग नहीं था। यह पीड़ित प्रक्रिया को दिखाता है, जो "थ्रेड पूल" से जुड़ा हुआ है, जो सैकड़ों अन्य प्रक्रियाओं से जुड़ा हुआ है। आप यहाँ यह बाहर की जाँच कर सकते हैं:
http://i.stack.imgur.com/7rlv3.jpg
किसी को भी इस क्यों हो रहा है के बारे में कोई संकेत है? मैं पिछले कुछ दिनों में इसे समझने की कोशिश कर पागल हो रहा हूं। मेरी वर्तमान परिकल्पना यह है कि यह मेरे डीबी उदाहरण में उपलब्ध वर्कर थ्रेड से संबंधित है, उपलब्ध स्मृति की मात्रा, या कुछ वास्तविक क्वेरी-स्तर ताले से संबंधित नहीं है।
धन्यवाद!
[इसे पहले से देखा गया है]] (http://blogs.msdn.com/b/bartd/archive/2008/09/24/today-s-annoyingly-unwieldy-term-intra-query-parallel-thread- deadlocks.aspx) क्या आपके अपडेट स्टेटमेंट में समांतर योजना है? –
और क्या आप कह रहे हैं कि 'dead_UNCOMMITTED' प्रभावी होने पर ये deadlocks ** कभी ** नहीं होते हैं? यह बिल्कुल स्पष्ट नहीं है कि यह दिखाए गए 'अपडेट' कथन को कैसे प्रभावित करेगा। –
वाह! मैं इतनी कम समय में इतनी जबरदस्त प्रतिक्रिया की उम्मीद नहीं कर रहा था! डेडलॉक्स अभी भी READ_UNCOMMITTED के अंतर्गत होते हैं, लेकिन केवल तभी जब कई, कई और समवर्ती धागे चल रहे हैं (लगभग 1000)। मैं अस्पष्टता के लिए क्षमा चाहता हूँ। – akwok