यदि क्लाइंट को डेटा प्राप्त करने में लंबा समय लगता है और बदले में SQL सर्वर को पावती भेजती है कि उसे डेटा प्राप्त होता है तो SQL सर्वर को इंतजार करना पड़ता है, इस प्रतीक्षा के कारण SQL सर्वर क्वेरी द्वारा रखे गए लॉक को तब तक जारी नहीं करेगा जब तक क्लाइंट से पावती प्राप्त नहीं हो जाती।
यह सटीक नहीं है, यह अलगाव स्तर पर निर्भर है।
डिफ़ॉल्ट READ COMMITTED
लॉक स्टेटमेंट निष्पादन की अवधि के लिए आयोजित नहीं किए जाते हैं। READ COMMITTED
स्टेटमेंट लेवल रीड सुसंगतता प्रदान नहीं करता है, केवल ग्वारेंटी यह है कि आप बिना पढ़े डेटा नहीं पढ़ सकते हैं। साझा लॉक को पंक्ति पढ़ने के लिए अधिग्रहित किया जाता है और फिर जारी किया जाता है।
जब तक आपके पास LOB प्रकार न हों।
LOB प्रकार, संभावित रूप से बहुत बड़े होने के कारण बफ़र नहीं किया जा सकता है। एक साझा ताला प्राप्त किया जाना चाहिए और तब तक आयोजित किया जाना चाहिए जब तक कि बयान पूरा न हो जाए, अनिवार्य रूप से आपको REPEATABLE READ
व्यवहार दे रहा है READ COMMITTED
।
यदि मैं एक उच्च-विलंबता नेटवर्क पर MSSQL डेटाबेस के लिए एक कॉल कर रहा हूं, तो क्या उस विलंबता के कारण टेबल लॉक हो सकते हैं?
विलंबता तालिका लॉक का कारण नहीं है, नहीं। हालाँकि, यदि एक टेबल लॉक को अधिग्रहित किया गया है, तो विलंबता इसे लम्बा करने जा रही है।
किसी को उद्धृत करने के लिए जो इससे बेहतर यांत्रिकी को जानता है I ( @RemusRusanu ):
निष्पादन के परिणाम के रूप में परिणाम क्लाइंट प्रोग्राम में वापस आ जाते हैं। निष्पादन पेड़ पर पंक्तियों के रूप में 'बबल' के रूप में, शीर्ष ऑपरेटर को आमतौर पर नेटवर्क बफ़र्स में इन पंक्तियों को लिखने और उन्हें क्लाइंट को वापस भेजने का काम सौंपा जाता है। परिणाम पहले कुछ इंटरमीडिएट स्टोरेज (मेमोरी या डिस्क) में नहीं बनाया जाता है और फिर क्लाइंट को वापस भेज दिया जाता है, बजाय इसे वापस भेजा जाता है जैसा कि बनाया जा रहा है (जैसा कि क्वेरी निष्पादित होता है)। परिणाम को क्लाइंट को वापस भेजना, ज़ाहिर है, नेटवर्क प्रवाह नियंत्रण प्रोटोकॉल के अधीन है। यदि क्लाइंट सक्रिय रूप से परिणाम का उपभोग नहीं कर रहा है (उदाहरण के लिए SqlDataReader.Read। क्वेरी।[स्रोत]
जहां परिणाम SQL सर्वर के रूप में जल्दी से उपभोग नहीं किया जा सकता है, यह ग्राहक या नेटवर्क के कारण हो सकता है, हम ASYNC_NETWORK_IO
इंतजार कर रहे हैं जमा हो रही है। दोहराने के लिए, यह उन तालों को प्रभावित नहीं करेगा जिन्हें अधिग्रहित किया गया है, बस वे जिस अवधि में हैं।
nolock
संकेत निर्दिष्ट नहीं करते, तब तक हमेशा एक ताला रहेगा । विलंबता केवल यह निर्धारित करती है कि ताला कितने समय तक आयोजित किया जाएगा।