क्या NOLOCK (Sql Server संकेत) बुरा अभ्यास है?


125

मैं ऐसी वेबसाइट और एप्लिकेशन बनाने के व्यवसाय में हूं जो मिशन क्रिटिकल नहीं हैं -> उदा। बैंकिंग सॉफ्टवेयर, अंतरिक्ष उड़ान, गहन देखभाल निगरानी आवेदन, आदि। आप विचार प्राप्त करते हैं।

तो, उस भारी अस्वीकरण के साथ, कुछ Sql कथन में NOLOCK संकेत का उपयोग करना बुरा है? कई साल पहले, यह एक साथी Sql प्रशासक द्वारा सुझाव दिया गया था कि मुझे NOLOCK का उपयोग करना चाहिए, यदि मैं "गंदे पढ़ने" से खुश हूं, जो मुझे मेरे सिस्टम से थोड़ा अधिक प्रदर्शन देगा क्योंकि प्रत्येक रीड लॉक नहीं होता है तालिका / पंक्ति / जो कुछ भी।

मुझे यह भी बताया गया कि अगर मैं मृत-ताले का अनुभव कर रहा हूं तो यह एक महान समाधान है। इसलिए, मैंने कुछ वर्षों के लिए उस विचार का अनुसरण करना शुरू कर दिया जब तक कि एक Sql गुरु मुझे कुछ यादृच्छिक कोड के साथ मदद नहीं कर रहा था और अपने sql कोड में सभी NOLOCKS को देखा। मुझे विनम्रता से डांटा गया था और उन्होंने मुझे यह समझाने की कोशिश की (यह अच्छी बात नहीं है) और मुझे लगता है कि मैं हार गया। मैंने महसूस किया कि उनकी व्याख्या का सार था 'यह एक अधिक गंभीर समस्या का बैंड-सहायता समाधान है .. खासकर यदि आप गतिरोध का सामना कर रहे हैं। जैसे, समस्या की जड़ को ठीक करो ’।

मैंने इसके बारे में हाल ही में कुछ googling किया और इस पोस्ट पर आया ।

तो, क्या कुछ sql db गुरु सेन्सि की कृपा मुझे बता सकती है?


अगर यह एक भारी पढ़ा वेबसाइट है, तो मैं यह नहीं कह रहा हूँ सैम, स्नैपशॉट अलगाव का उपयोग कर रहे हैं। लेकिन तब आप कह रहे हैं कि एसओ ने ऐसा किया है, और यह बुरा है? या सिर्फ NOLOCK के उनके उपयोग?
शुद्ध। क्रोम

जवाबों:


67

NOLOCK संकेत के साथ, SELECTबयान के लिए लेन-देन अलगाव स्तर है READ UNCOMMITTED। इसका मतलब है कि क्वेरी में गंदे और असंगत डेटा दिखाई दे सकते हैं।

एक नियम के रूप में लागू करने के लिए यह एक अच्छा विचार नहीं है। यहां तक ​​कि अगर यह गंदा पढ़ा व्यवहार आपके मिशन महत्वपूर्ण वेब आधारित अनुप्रयोग के लिए ठीक है, तो एक NOLOCK स्कैन 601 त्रुटि का कारण बन सकता है जो लॉकिंग सुरक्षा की कमी के परिणामस्वरूप डेटा आंदोलन के कारण क्वेरी को समाप्त कर देगा।

मेरा सुझाव है कि स्नैपशॉट अलगाव में मदद करता है और जब यह दर्द होता है - MSDN अधिकांश परिस्थितियों में SNAPSHOT के बजाय READ COMMITTED SNAPSHOT का उपयोग करने की सिफारिश करता है।


1
रेक्स, कृपया स्नैपशॉट अलगाव के बारे में एक नोट जोड़ने के लिए स्वतंत्र महसूस करें।
सैम केसर

2
हाँ, सैम स्नैपशॉट अलगाव कह रहा है और आप सुझाव दे रहे हैं कि स्नैपशॉट पढ़ें। मैं इतना भ्रमित हो रहा हूं: पी (और मुझे अभी तक लेखों में भी तल्लीन करना है!)
Pure.Krome

2
यह कभी-कभी उपयोगी होता है, लेकिन सामान्य रूप से उत्पादन के लिए नहीं। मैं अक्सर डेटा का एक नमूना बाहर खींचने के लिए या रिपोर्ट बनाने के लिए उपयोग करता हूं जहां मैं ज्यादातर परिमाण के किसी न किसी क्रम के बारे में परवाह करता हूं, जहां एक गंदा पाठ कोई फर्क नहीं पड़ता।
तीमुथियुसविमेन

NOLOCK == मुझे परवाह नहीं है कि अगर प्रतिबद्ध पंक्तियाँ छूट गई हैं, तो बिना पंक्तियाँ शामिल हैं, दुर्लभ मामलों में एक ही पंक्ति को एक से अधिक बार लौटाया जाता है, और बहुत ही दुर्लभ मामलों में पंक्तियों को वापस कर दिया जाता है जो मेरी क्वेरी से मेल नहीं खाती हैं। (देखें blogs.msdn.com/b/sqlcat/archive/2007/02/01/... , इस विषय पर एक और एसओ q'n से पाया जाता है)
एंड्रयू हिल

106

स्टैक ओवरफ़्लो पर काम कर रहा से पहले, मैं के खिलाफ था NOLOCKप्रिंसिपल है कि आप संभवतः एक प्रदर्शन कर सकता है पर SELECTसाथ NOLOCKऔर वापस उस तारीख या असंगत से बाहर हो सकता डेटा के साथ परिणाम प्राप्त। इस बारे में सोचने का एक कारक यह है कि एक ही समय में कितनी प्रक्रियाएँ सम्मिलित की जा सकती हैं / अपडेट की जा सकती हैं, एक ही प्रक्रिया एक ही तालिका से डेटा का चयन कर सकती है। यदि यह बहुत होता है तो गतिरोध की एक उच्च संभावना है जब तक कि आप डेटाबेस मोड का उपयोग नहीं करते हैं जैसे कि READ COMMITED SNAPSHOT

मैंने तब से NOLOCKसाक्षी के उपयोग के बारे में अपना दृष्टिकोण बदल दिया है कि यह कैसे SELECTप्रदर्शन में सुधार कर सकता है और साथ ही एक बड़े पैमाने पर लोड किए गए SQL सर्वर पर गतिरोध को समाप्त कर सकता है। कई बार ऐसा होता है कि आप इस बात की परवाह नहीं करते हैं कि आपका डेटा बिलकुल 100% प्रतिबद्ध नहीं है और आपको परिणाम जल्दी से वापस चाहिए, भले ही वे पुराने हों।

उपयोग करने के बारे में सोचते समय अपने आप से एक प्रश्न पूछें NOLOCK:

क्या मेरी क्वेरी में एक ऐसी तालिका शामिल है जिसमें INSERT/ UPDATEआदेशों की संख्या अधिक है और मुझे परवाह है कि क्या किसी क्वेरी से लौटाया गया डेटा एक निश्चित समय में इन परिवर्तनों को याद कर रहा है?

यदि उत्तर नहीं है, तो NOLOCKप्रदर्शन में सुधार करने के लिए उपयोग करें।


मैंने केवल NOLOCKस्टैक ओवरफ्लो के लिए कोड बेस के भीतर कीवर्ड की त्वरित खोज की और 138 उदाहरणों को पाया, इसलिए हम इसे कुछ स्थानों पर उपयोग करते हैं।


7
IMO, यह थोड़ा सरल है। कवर इंडेक्स का उपयोग करके डेडलॉक को हटाया जा सकता है, दबाव को क्लस्टर्ड इंडेक्स से हटा सकते हैं।
मिच गेहूं

8
मैं अच्छे सूचकांक कवरेज के महत्व को कम नहीं करना चाहता। ऐसे समय होते हैं जब NOLOCK का उपयोग करने वाले क्वेरीज़ उच्च संख्या में आवेषण / अद्यतनों के साथ तालिकाओं द्वारा प्राप्त लाभ के शीर्ष पर अतिरिक्त प्रदर्शन जोड़ सकते हैं। स्टैक ओवरफ्लो पर क्वेरी की गति गलत या लापता डेटा की कीमत पर भी सर्वोपरि है।
ज्योफ Dalgas

9
जाहिर है एक का उपयोग कर डुप्लिकेट पंक्तियाँ प्राप्त कर सकते हैंNOLOCK । इसका मतलब है कि मुझे आपके जवाब को नीचा दिखाना होगा। माफ़ करना।
एरिक

1
@ मिचवेट ए SELECT, केवल एक कवरिंग इंडेक्स से पढ़ने से गतिरोध पैदा हो सकता है। SPID 1) SELECTकवरिंग इंडेक्स से शुरू होता है । SPID 2) UPDATEतालिका का प्रारंभ करें । अपडेट फिर कवरिंग इंडेक्स को अपडेट करने पर चलता है। UPDATEएक इंडेक्स रेंज तक पहुंच जाता है जो लॉक SELECTहो जाता है और ब्लॉक हो जाता है। SPID 1) अभी भी कवरिंग इंडेक्स के माध्यम से मांग कर रहा है, एक सीमा पाता है UPDATEऔर अवरुद्ध हो जाता है। DEADLOCK । कुछ भी नहीं है कि गतिरोध को हल कर सकते हैं (SQL सर्वर त्रुटि 1205 को पकड़ने के अलावा, और स्वचालित रूप से पुनः प्रयास, या उपयोग कर NOLOCK)
इयान बॉयड

2
मुझे लगता है कि इस उत्तर पर ध्यान देने योग्य बात यह है कि यह समस्या के लिए उपयुक्त था । आपके आवेदन के आधार पर, बासी / असम्बद्ध / डुप्लिकेट / लापता डेटा का जोखिम ट्रेडऑफ के लायक नहीं हो सकता है।
होलिस्टिक डेवलपर

20

यदि आप गंदे रीड्स के बारे में परवाह नहीं करते हैं (अर्थात मुख्यतः स्थिति में), तो NOLOCKठीक है।

लेकिन , ध्यान रखें कि लॉकिंग की अधिकांश समस्याएं आपके क्वेरी वर्कलोड के लिए 'सही' इंडेक्स नहीं होने के कारण होती हैं (हार्डवेयर कार्य पर निर्भर है)।

और गुरु की व्याख्या सही थी। यह आमतौर पर एक अधिक गंभीर समस्या का बैंड-सहायता समाधान है।

संपादित करें : मैं निश्चित रूप से सुझाव नहीं दे रहा हूं कि NOLOCK का उपयोग किया जाना चाहिए। मुझे लगता है कि मुझे स्पष्ट रूप से स्पष्ट करना चाहिए था। (मैं केवल इसका उपयोग कभी-कभी उन विषम परिस्थितियों में करूँगा जहाँ मैंने विश्लेषण किया था कि यह ठीक है)। एक उदाहरण के रूप में, कुछ समय पहले मैंने कुछ TSQL पर काम किया था जो लॉकिंग समस्याओं को दूर करने और कम करने के लिए NOLOCK के साथ छिड़का गया था। मैंने उन सभी को हटा दिया, सही अनुक्रमों को लागू किया, और सभी गतिरोध चले गए।


3
हम्म .. मैं अभी भी नहीं मिलता। तो यह ठीक है, लेकिन यह भी खराब रूप है .. कि आप क्या कह रहे हैं?
शुद्ध। क्रोम

इस धारणा पर कि आप गंदे रीड्स की परवाह नहीं करते हैं, तो यह चोट नहीं पहुंचेगी। लेकिन यह आमतौर पर लक्षण का इलाज करने का एक कारण है और इसका कारण नहीं है ...
मिच गेहूं

2
वैसे मुझे नहीं लगता कि इसका उचित रेक्सोम सिर्फ डाउनवोट किया गया था, मुझे लगता है कि आपने मनमानी त्रुटियों को संबोधित नहीं किया था जो कि आप नोलॉक का उपयोग करते समय बस ऊपर तैरते हैं। आपकी वेबसाइट पर एक बार एक रिक्त त्रुटि पृष्ठ प्राप्त करने के लिए इसका ठीक नहीं है, यह वास्तव में खराब रूप है। मुझे यह पसंद नहीं है कि "यदि आप गंदे के बारे में परवाह नहीं करते हैं तो उसका जुर्माना ठीक है" ... यह ठीक नहीं है, भले ही आप गंदे रीड के बारे में परवाह न करें
सैम केसर

जब कोई क्वेरी एक अपवाद उत्पन्न करती है तो रिक्त पृष्ठ जो आप के लिए रिट्री लॉजिक को लागू नहीं करते हैं। जब आपकी क्वेरी अपवाद के साथ निष्पादित होती है, तो आपकी साइटों पर क्या होता है, क्या आपके पास हर जगह पुन: तर्क है?
सैम सैफ्रन

एक बहुत अच्छी तरह से अनुकूलित क्वेरी लें जिसे आप जानते हैं कि उचित अनुक्रमित मार रहा है। फिर नोलॉक संकेत जोड़ें और देखो यह तेजी से मिलता है। यदि आप गंदे पढ़े हुए की परवाह नहीं करते हैं तो आप कभी भी खुद को नोलॉक का उपयोग करके चोट नहीं पहुंचाएंगे
Hardwareguy

13

संदेह है कि यह एक "गुरु" था जिसे उच्च यातायात में कोई अनुभव था ...

जब तक व्यक्ति पूरी तरह से लोड किए गए पृष्ठ को देख रहा होता है, तब तक वेबसाइटें आमतौर पर "गंदी" होती हैं। डेटाबेस से लोड होने वाले फॉर्म पर विचार करें और फिर संपादित किए गए डेटा को सहेजता है ?? यह मूर्खतापूर्ण तरीका है जिस तरह से लोग गंदे पढ़ते हैं, ऐसा नहीं है।

उस ने कहा, यदि आपके पास अपने चयन पर कई परतें हैं, तो आप एक खतरनाक अतिरेक में निर्माण कर सकते हैं। यदि आप पैसे या स्थिति परिदृश्यों में काम कर रहे हैं, तो आपको न केवल व्यवहार डेटा को पढ़ने / लिखने की आवश्यकता है, बल्कि एक उचित संगामिति समाधान (कुछ सबसे "गुरु" से परेशान न हों)।

दूसरी ओर, यदि आपके पास एक वेबसाइट के लिए एक उन्नत उत्पाद खोज है (अर्थात ऐसा कुछ जो कैश नहीं होगा और थोड़ा गहन होगा) और आपने कभी कुछ समवर्ती उपयोगकर्ताओं (फेनोमिनल) से अधिक के साथ एक साइट बनाई है "विशेषज्ञों" नहीं है), यह उसके पीछे हर दूसरी प्रक्रिया गर्दन गर्दन करने के लिए नए सिरे से है।

जानिए इसका क्या मतलब है और उचित होने पर इसका उपयोग करें। आपका डेटाबेस इन दिनों लगभग हमेशा आपकी मुख्य बोतल गर्दन होगा और NOLOCK का उपयोग करने के बारे में स्मार्ट होने से आप बुनियादी ढांचे में हजारों बचा सकते हैं।

संपादित करें: यह सिर्फ गतिरोध नहीं है, यह इसके साथ मदद करता है, यह भी है कि जब तक आप समाप्त नहीं होते हैं, तब तक आप हर किसी को प्रतीक्षा करने जा रहे हैं, या फिर बहुत ही बढ़िया।

EF4 में NOLOCK संकेत का उपयोग?


10

कोई भी उत्तर गलत नहीं है, हालांकि थोड़ा भ्रमित हो सकता है।

  • एकल मानों / पंक्तियों की क्वेरी करते समय NOLOCK का उपयोग करना हमेशा बुरा व्यवहार होता है - आप कभी भी गलत जानकारी प्रदर्शित नहीं करना चाहते हैं या शायद गलत डेटा पर कोई कार्रवाई भी कर सकते हैं।
  • किसी न किसी सांख्यिकीय जानकारी को प्रदर्शित करते समय, NOLOCK बहुत उपयोगी हो सकता है। एक उदाहरण के रूप अतः ले लो: यह ताले लेने के लिए पढ़ने के लिए बकवास होगा सटीक एक सवाल है, या एक टैग के लिए सवालों की सही संख्या के दृश्यों की संख्या। यदि आप गलत तरीके से "sql-server" के साथ टैग किए गए 3360 प्रश्नों को अब किसी के पास नहीं रखते हैं, और लेनदेन रोलबैक के कारण 3359 प्रश्न एक सेकंड बाद में आते हैं।

मैं आपके पहले बिंदु से बिल्कुल भी सहमत नहीं हूँ। यदि आप एकल मान / पंक्तियों को क्वेरी कर रहे हैं, और आप उस पंक्ति के लिए एक अद्वितीय आईडी निर्दिष्ट कर रहे हैं, और आप जानते हैं कि कोई अन्य प्रक्रिया इसे एक्सेस नहीं कर रही है, तो नोलॉक का उपयोग करना पूरी तरह से स्वीकार्य है, और एक समवर्ती अनुप्रयोग में अवरुद्ध को कम करता है।
tuseau

1
नहीं यह नहीं। अन्य कारणों से पंक्ति बदल सकती है, उदाहरण के लिए दूसरी पंक्ति डालने से पृष्ठ विभाजित हो जाता है। उचित अनुक्रमण, पढ़ें प्रतिबद्ध स्नैपशॉट और स्नैपशॉट अलगाव लगभग हमेशा बेहतर विचार हैं।
मार्क सोउल

1
@tuseau अगर आप "जानते हैं" कि कोई अन्य प्रक्रिया पंक्ति तक नहीं पहुंच रही है, तो ताला लेने का कार्य कुछ भी अवरुद्ध नहीं करेगा, इसलिए आपको लागत (व्यावहारिक रूप से) कुछ भी नहीं,
एंड्रयू हिल

2

एक पेशेवर डेवलपर के रूप में मैं कहूंगा कि यह निर्भर करता है। लेकिन मैं निश्चित रूप से GATS और OMG पोंजी सलाह का पालन करता हूं। जानें कि आप क्या कर रहे हैं, यह जानें कि यह कब मदद करता है और कब दर्द होता है

संकेत और अन्य खराब विचारों को पढ़ें

क्या आप sql सर्वर को गहराई से समझ सकते हैं। मैं आम तौर पर नियम का पालन करता हूं कि SQL संकेत EVIL हैं, लेकिन दुर्भाग्यवश मैं उन्हें अब हर बार उपयोग करता हूं और जब मैं SQL सर्वर को मजबूर करने से तंग आ जाता हूं तो चीजें करता हूं ... लेकिन ये दुर्लभ मामले हैं।

ल्यूक


2

जब ऐप-सपोर्ट एसएसएमएस का उपयोग कर उत्पादन-सर्वर से विज्ञापन-हॉक प्रश्नों का उत्तर देना चाहता था (जो रिपोर्टिंग के माध्यम से पूरा नहीं किया गया था) मैंने अनुरोध किया कि वे नोलॉक का उपयोग करें। इस तरह से 'मुख्य' व्यवसाय प्रभावित नहीं होता है।


2

मैं NOLOCK संकेत के बारे में कुछ टिप्पणियों से सहमत हूं और विशेष रूप से उन लोगों के साथ जो कह रहे हैं "जब यह उचित हो तब इसका उपयोग करें"। यदि एप्लिकेशन खराब तरीके से लिखा गया है और संक्षिप्त रूप से अनुचित तरीके से उपयोग कर रहा है - जिससे लॉक बढ़ने का कारण हो सकता है। अत्यधिक लेन-देन की तालिका भी उनके स्वभाव के कारण हर समय बंद हो रही है। अच्छा सूचकांक कवरेज होने से डेटा को पुनः प्राप्त करने में मदद नहीं मिलेगी, लेकिन UNCOMMITTED को पढ़ने के लिए अलगाव स्तर निर्धारित करना। इसके अलावा, मेरा मानना ​​है कि NOLOCK संकेत का उपयोग कई मामलों में सुरक्षित है जब परिवर्तनों की प्रकृति अनुमानित है। उदाहरण के लिए - निर्माण में, जब यात्रियों के साथ नौकरियों को माप के आवेषण के बहुत से विभिन्न प्रक्रियाओं से गुजरना होता है, तो आप NOLOCK संकेत के साथ समाप्त नौकरी के खिलाफ क्वेरी को सुरक्षित रूप से निष्पादित कर सकते हैं और इस तरह से अन्य सत्रों के साथ टकराव से बचते हैं जो टेबल पर PROMOTED या EXCLIVEIVE ताले लगाते हैं। /पृष्ठ। इस मामले में आपके द्वारा उपयोग किया जाने वाला डेटा स्थिर है, लेकिन यह एक बहुत ही लेन-देन तालिका में सैकड़ों लाखों रिकॉर्ड और प्रति मिनट हजारों अपडेट / आवेषण के साथ रह सकता है। चियर्स


2

मेरा मानना ​​है कि नोलॉक का उपयोग करना वास्तव में सही नहीं है।

यदि आप एक पंक्ति पढ़ रहे हैं, तो सही सूचकांक का अर्थ है कि आपको NOLOCK की आवश्यकता नहीं होगी क्योंकि व्यक्तिगत पंक्ति क्रियाएं जल्दी से पूरी हो जाती हैं।

यदि आप अस्थायी प्रदर्शन के अलावा किसी अन्य चीज़ के लिए कई पंक्तियाँ पढ़ रहे हैं, और परिणाम दोहराने में सक्षम होने के बारे में परवाह करते हैं, या उत्पादित संख्या से बचाव करते हैं, तो NOLOCK उचित नहीं है।

NOLOCK "के लिए एक सरोगेट टैग है" मुझे परवाह नहीं है अगर इस उत्तर में डुप्लिकेट पंक्तियाँ, पंक्तियाँ जो हटा दी गई हैं, या वे पंक्तियाँ जिन्हें रोलबैक के कारण शुरू करने के लिए कभी नहीं डाला गया था "

त्रुटियां जो NOLOCK के तहत संभव हैं:

  • मैच जो रोते हैं वह बिल्कुल नहीं लौटते हैं।
  • एकल पंक्तियों को कई बार लौटाया जाता है (एक ही प्राथमिक कुंजी के कई उदाहरण सहित)
  • जो पंक्तियाँ मेल नहीं खातीं, उन्हें लौटा दिया जाता है।

कोई भी क्रिया जो पृष्ठ विभाजन का कारण बन सकती है जबकि नॉकॉक का चयन चल रहा है इन चीजों के कारण हो सकता है। लगभग किसी भी कार्रवाई (यहां तक ​​कि एक डिलीट) से पेज स्प्लिट हो सकता है।

इसलिए: यदि आप "जानते हैं" कि पंक्ति चल रही है, तो आप परिवर्तित नहीं करेंगे, नोलॉक का उपयोग न करें, क्योंकि एक सूचकांक कुशल जांच को अनुमति देगा।

यदि आपको संदेह है कि क्वेरी चल रही है, तो पंक्ति बदल सकती है, और आप सटीकता की परवाह करते हैं, नोलॉक का उपयोग न करें।

यदि आप डेडलॉक के कारण NOLOCK पर विचार कर रहे हैं, तो अनपेक्षित टेबल स्कैन के लिए क्वेरी प्लान संरचना की जांच करें, डेडलॉक ट्रेस करें और देखें कि आप क्यों होते हैं। लिखने के आसपास NOLOCK का मतलब हो सकता है कि पहले से गतिरोध वाले प्रश्न संभवतः दोनों गलत उत्तर लिखेंगे।


2

जब संभव हो तो बेहतर उपाय:

  • रिपोर्टिंग डेटाबेस में अपना डेटा (लॉग-प्रतिकृति का उपयोग करके) दोहराएं।
  • सैन स्नैपशॉट का उपयोग करें और डीबी के एक सुसंगत संस्करण को माउंट करें
  • एक डेटाबेस का उपयोग करें, जिसमें एक बेहतर मौलिक लेनदेन अलगाव स्तर है

SNAPSHOT लेनदेन अलगाव स्तर बनाया गया था क्योंकि MS Oracle को बिक्री खो रहा था। इस समस्या से बचने के लिए ओरेकल पूर्ववत / पुनः लॉग का उपयोग करता है। Postgres MVCC का उपयोग करता है। भविष्य में MS के हेकटन MVCC का उपयोग करेंगे, लेकिन उत्पादन तैयार होने से कुछ साल दूर हैं।


ऊपर एक टाइपो है। मेरे कहने का मतलब है "बेहतर मूलभूत लेनदेन अलगाव तंत्र"।
pwy

1
SNAPSHOT लेन-देन अलगाव स्तर MS का आविष्कार है। मूल रूप से यह TEMPDB में एक अस्थायी तालिका में डेटा डालता है। उस DB को बॉक्स पर सभी DB के बीच साझा किया जाता है। इसलिए, जब संभव हो तो आप TEMPDB के लिए SSDs का उपयोग करना चाहते हैं। संभवतः अन्य विकल्पों की तुलना में यह कम प्रयास है।
pwy

1

NOLOCK का अक्सर डेटाबेस पढ़ने की गति बढ़ाने के लिए एक जादूई तरीके के रूप में शोषण किया जाता है, लेकिन मैं इसे संभव रूप से उपयोग करने से बचने की कोशिश करता हूं।

परिणाम सेट में वे पंक्तियाँ हो सकती हैं जो अभी तक प्रतिबद्ध नहीं हैं, जिन्हें अक्सर बाद में वापस ले लिया जाता है।

एक त्रुटि या परिणाम सेट खाली हो सकता है, पंक्तियाँ गायब हो सकती हैं या एक ही पंक्ति को कई बार प्रदर्शित कर सकती हैं।

ऐसा इसलिए है क्योंकि अन्य लेनदेन उसी समय डेटा ले जा रहे हैं जिस समय आप इसे पढ़ रहे हैं।

READ COMMITTED एक अतिरिक्त समस्या जोड़ता है जहां डेटा एक एकल स्तंभ के भीतर दूषित होता है जहां कई उपयोगकर्ता एक ही सेल को एक साथ बदलते हैं।


-2

वास्तविक जीवन में जहां आप पहले से ही लिखे गए सिस्टम और तालिकाओं को जोड़ते हैं, तो 14gig डेटा तालिका के डेटा लोडिंग को बहुत धीमा कर देते हैं, आपको कुछ समय के लिए अपनी रिपोर्ट और महीने की समाप्ति पर NOLOCK के साथ उपयोग करने के लिए मजबूर किया जाता है ताकि समग्र funtions (राशि) , गिनती आदि) पंक्ति, पृष्ठ, टेबल लॉकिंग और समग्र प्रदर्शन को अलग नहीं करते हैं। एक नई प्रणाली में कहना आसान है कि NOLOCK के साथ कभी भी उपयोग न करें और इंडेक्स का उपयोग करें - लेकिन इंडेक्स को जोड़ने से डेटा लोडिंग में भारी गिरावट आती है, और जब मुझे बताया जाता है, तो, इंडेक्स को हटाने के लिए कोड बेस को बदल दें, फिर बल्क लोड फिर इंडेक्स को फिर से बनाएं - यदि आप एक नई प्रणाली विकसित कर रहे हैं तो सब ठीक और अच्छा है। लेकिन तब नहीं जब आपके पास पहले से कोई सिस्टम हो।


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