मेरे पास एक चयन के साथ एक प्रक्रिया है जो 5 से 10 मिनट के आदेश पर समाप्त होने में काफी समय लेती है।
मैं वर्तमान में एमओएल एसक्यूएल डेटाबेस इंजन के संकेत के रूप में NOLOCK का उपयोग नहीं कर रहा हूं।
उसी समय हमारे पास एक ही डेटाबेस और उसी तालिका में अपडेट और आवेषण करने की एक और प्रक्रिया है।
पहली प्रक्रिया शुरू कर दिया है, हाल ही में संदेशएक डेडलॉक पीड़ित होने की प्रक्रिया के कारण
SqlException साथ समय से पहले ही समाप्त करने के लिए: लेन-देन किसी अन्य प्रक्रिया के साथ ताला संसाधनों पर deadlocked किया गया था और गतिरोध शिकार के रूप में चुना गया है।
यह पहली प्रक्रिया समान स्थितियों में अन्य साइटों पर चल रही है लेकिन छोटे डेटाबेस के साथ और इस प्रकार प्रश्न में चुनिंदा कथन में बहुत कम समय लगता है (30 सेकंड या उससे अधिक के क्रम में)। इन अन्य साइटों में, मुझे इन अन्य साइटों में डेडलॉक संदेश नहीं मिला है। मुझे यह संदेश उस साइट पर भी नहीं मिला जिसकी शुरुआत में समस्या है, लेकिन, मुझे लगता है कि डेटाबेस बढ़ने के बाद, मुझे विश्वास है कि मैंने कुछ सीमा पार कर ली होगी। यहां मेरे प्रश्न हैं:
- क्या लेनदेन को निष्पादित करने में लगने वाला समय हो सकता है, संबंधित प्रक्रिया को डेडलॉक पीड़ित के रूप में फ़्लैग करने की अधिक संभावना होती है।
- यदि मैं एक नोलोक संकेत के साथ चयन निष्पादित करता हूं, तो क्या इससे समस्या दूर हो जाएगी?
- मुझे संदेह है कि चुनिंदा वक्तव्य में WHERE खंड के हिस्से के रूप में चेक किए गए डेटाटाइम फ़ील्ड धीमे लुकअप समय का कारण बन रहा है। क्या मैं इस क्षेत्र के आधार पर एक सूचकांक बना सकता हूं? क्या यह सलाह दी जाती है?
बिंदु 1 का आंशिक उत्तर: टाइमआउट के साथ डेडलॉक को भ्रमित न करें। यदि आप एक टाइमआउट पीड़ित थे तो एक लेनदेन खत्म करने में शामिल समय दूसरे के लिए जिम्मेदार हो सकता है। साथ ही, यह जानना उपयोगी होगा कि आप किस संसाधन पर डेडलॉकिंग कर रहे हैं (क्या यह एक इंडेक्स या टेबल है?)। – NealB
SET DEADLOCK_PRIORITY HIGH वैकल्पिक डेटाबेस Dbname SET MULTI_USER; – gstackoverflow