मेरे पास 5 से 10 मिनट के आदेश पर चयन करने के लिए एक प्रक्रिया है जिसे समाप्त होने में लंबा समय लगता है।
मैं वर्तमान में MS SQL डेटाबेस इंजन के लिए संकेत के रूप में NOLOCK का उपयोग नहीं कर रहा हूं।
उसी समय हमारे पास एक ही डेटाबेस और समान तालिकाओं में अपडेट और आवेषण करने की एक और प्रक्रिया है।
पहली प्रक्रिया शुरू हो गई है, हाल ही में एक संदेश के साथ समय से पहले समाप्त करने के लिए
SQLEXCEPTION: एक अन्य प्रक्रिया के साथ लॉक संसाधनों पर लेन-देन गतिरोध किया गया था और गतिरोध पीड़ित के रूप में चुना गया है।
यह पहली प्रक्रिया समान स्थितियों में अन्य साइटों पर चल रही है, लेकिन छोटे डेटाबेस के साथ और इस प्रकार प्रश्न में चयनित कथन बहुत कम समय (30 सेकंड या इसके बाद के क्रम पर) लेता है। इन अन्य साइटों में, मुझे इन अन्य साइटों में गतिरोध संदेश नहीं मिलता है। मुझे यह संदेश उस साइट पर भी नहीं मिला, जिसे शुरू में समस्या हो रही थी, लेकिन, मेरा मानना है कि जैसे-जैसे डेटाबेस बड़ा हुआ है, मुझे विश्वास है कि मैंने कुछ सीमा पार कर ली होगी। यहाँ मेरे सवाल हैं:
- लेन-देन के लिए लेनदेन करने में लगने वाले समय को संबंधित प्रक्रिया को गतिरोध पीड़ित के रूप में चिह्नित किए जाने की अधिक संभावना हो सकती है।
- अगर मैं NOLOCK संकेत के साथ चयन को निष्पादित करता हूं, तो क्या यह समस्या को दूर करेगा?
- मुझे संदेह है कि चयनित विवरण में WHERE क्लॉज़ के हिस्से के रूप में जाँच किया गया एक डेटाटाइम फ़ील्ड धीमा लुकअप समय का कारण बन रहा है। क्या मैं इस क्षेत्र के आधार पर एक सूचकांक बना सकता हूं? क्या यह उचित है?