के साथ (NOLOCK) बनाम सेट ट्रांसपोर्टेशन लेवल की मरम्मत की गई


118

क्या कोई मुझे कुछ मार्गदर्शन दे सकता है जब मुझे WITH (NOLOCK)विरोध के रूप में उपयोग करना चाहिएSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

प्रत्येक के पक्ष / विपक्ष क्या हैं? क्या कोई अनपेक्षित परिणाम है जिसे आप एक का उपयोग करके दूसरे के विपरीत चला रहे हैं?

जवाबों:


105

वे एक जैसी ही चीज हैं। यदि आप set transaction isolation levelकथन का उपयोग करते हैं , तो यह कनेक्शन के सभी तालिकाओं पर लागू होगा, इसलिए यदि आप केवल nolockएक या दो तालिकाओं का उपयोग करना चाहते हैं ; अन्यथा दूसरे का उपयोग करें।

दोनों आपको गंदे रीड्स देंगे। यदि आप इसके साथ ठीक हैं, तो उनका उपयोग करें। यदि आपके पास गंदे रीड नहीं हो सकते हैं, तो इसके बजाय विचार करें snapshotया serializableसंकेत दें।


यदि आप प्रेत डेटा की परवाह नहीं करते हैं तो REPEATABLE READइसके बजाय पर विचार करें SERIALIZABLESERIALIZABLEवास्तव में प्रतिबंधात्मक है और इसे लगभग कभी भी उपयोग नहीं किया जाना चाहिए (उदाहरण के लिए कुछ महत्वपूर्ण वित्तीय अनुप्रयोगों को छोड़कर)।
क्रिप्टोस

25

के साथ (NOLOCK) एक टेबल स्तर पर एक संकेत है। कनेक्शन को प्रभावित करने के साथ READ_UNCOMMITTED में लेनदेन अलगाव स्तर सेट करना। अंतर स्कोप के संदर्भ में है। यहां SQL सर्वर प्रलेखन में READUNCOMMITTED और NOLOCK देखें:

http://technet.microsoft.com/en-us/library/ms187373.aspx

परिवहन अलगाव स्तर के लिए: http://technet.microsoft.com/en-us/library/ms173763.aspx


10
  • NOLOCK तालिका में स्थानीय है (या दृश्य आदि)
  • READ UNCOMMITTED प्रति सत्र / कनेक्शन है

दिशा-निर्देशों के रूप में ... StackOverflow और इलेक्ट्रिक इंटरवेब से एक यादृच्छिक खोज ...


अंतिम लिंक "NOLOCK का उपयोग बुरा क्यों है .." अब मौजूद नहीं है।
sangam

1
इलेक्ट्रिक इंटरवेब अनमोल है। मेरे दिन के लिए कुछ धूप जोड़ने के लिए धन्यवाद।
JJS

9

मेरे ज्ञान में एकमात्र अंतर प्रभावों का दायरा है जैसा कि स्ट्रॉमी ने कहा था। NOLOCK ने एक मेज पर इशारा किया और सत्र के दौरान पढ़े।

समस्याओं के रूप में हो सकता है, यह सब स्थिरता के बारे में है। यदि आप परवाह करते हैं तो इस बात से अवगत रहें कि आपको वह गंदे पाठ कहा जा सकता है जो गलत जानकारी पर हेरफेर किए जा रहे अन्य डेटा को प्रभावित कर सकते हैं।

मुझे व्यक्तिगत रूप से नहीं लगता कि मैंने इसमें से कोई समस्या देखी है, लेकिन यह अधिक हो सकता है कि मैं नोलॉक का उपयोग कैसे करूं। आपको यह पता होना चाहिए कि ऐसे परिदृश्य हैं जहां इसका उपयोग करना ठीक होगा। परिदृश्य जहां आप ज्यादातर एक तालिका में नए डेटा जोड़ रहे हैं, लेकिन एक और प्रक्रिया है जो डेटा परिदृश्य की जांच करने के लिए पीछे आती है। यह संभवत: ठीक होगा क्योंकि प्रमुख प्रवाह में रीड के दौरान पीछे जाने और पंक्तियों को अपडेट करना शामिल नहीं है।

इसके अलावा, मेरा मानना ​​है कि इन दिनों आपको मल्टी-वर्जन कॉन्सिलर कंट्रोल में देखना चाहिए। मेरा मानना ​​है कि उन्होंने इसे 2005 में जोड़ा था और यह पाठकों को पाठकों को ब्लॉक करने के लिए डेटाबेस का एक स्नैपशॉट उपयोग करने से रोकने में मदद करता है। मैं एक लिंक शामिल करूंगा और आगे के शोध को पाठक तक छोड़ूंगा:

MVCC

डेटाबेस अलगाव स्तर


+1 यद्यपि मुझे READ_UNCOMMITTED के "आपको चाहिए" पहलू में नहीं मिला, शॉन ने इसे अच्छी तरह से कवर किया है। ऐसे भी मामले हैं जहां आप SQL सर्वर (पेज विभाजन के कारण) में दो बार एक ही पंक्ति पढ़ सकते हैं।
Anj246

6

यदि आप दृश्य में सेट किए गए अलगाव अलगाव के स्तर को पढ़ें नहीं पढ़े गए हैं (आप वास्तव में वहां केवल एक स्क्रिप्ट रख सकते हैं), इसलिए यदि गंदी पंक्तियों को शामिल किया जाना है, तो आपको (nolock) का उपयोग करना होगा।


4

जैसा कि आपको प्रत्येक तालिका के लिए (NOLOCK) के साथ उपयोग करना होगा, इसे हर FROM या JOIN क्लॉज में लिखना कष्टप्रद हो सकता है। हालाँकि इसका एक कारण है कि इसे "गंदा" कहा जाता है। इसलिए आपको वास्तव में पता होना चाहिए कि आप कब एक करते हैं, और इसे सत्र के दायरे के लिए डिफ़ॉल्ट रूप में सेट नहीं करना चाहिए। क्यों?

एक (NOLOCK) के साथ भूल जाने से आपके कार्यक्रम को बहुत नाटकीय तरीके से प्रभावित नहीं किया जा सकता है, हालांकि एक गंदा पाठ करना जहां आप नहीं चाहते हैं कि कुछ परिस्थितियों में अंतर बना सकते हैं।

इसलिए (NOLOCK) के साथ उपयोग करें यदि चयनित डेटा को गलत होने की अनुमति है, क्योंकि इसे बाद में वापस लाया जा सकता है। यह ज्यादातर तब उपयोग किया जाता है जब आप प्रदर्शन को बढ़ाना चाहते हैं, और आपके आवेदन के संदर्भ में आवश्यकताओं को यह जोखिम लेने की अनुमति देता है कि असंगत डेटा प्रदर्शित किया जा रहा है। हालाँकि, आपको या किसी प्रभारी को बिना (NOLOCK) के उपयोग के निर्णय के पेशेवरों और विपक्षों को तौलना होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.