"Lock Escalation" एसक्यूएल बड़े अपडेट के लिए लॉकिंग कैसे संभालता है। जब एसक्यूएल बहुत सारी पंक्तियों को बदलने जा रहा है, तो डेटाबेस इंजन के लिए यह बहुत ही कुशल है कि कई छोटी चीजें (जैसे पंक्ति ताले) को लॉक करने के बजाय कम, बड़े ताले (उदा। पूरी तालिका) ले जाएं।
लेकिन जब आपके पास एक बड़ी मेज है, तो यह समस्याग्रस्त हो सकता है, क्योंकि पूरे टेबल पर लॉक लेना लंबे समय तक अन्य प्रश्नों को लॉक कर सकता है। यह ट्रेडऑफ है: कई छोटे-ग्रैन्युलरिटी लॉक कम (या एक) मोटे अनाज वाले ताले से धीमे होते हैं, और एक टेबल के विभिन्न हिस्सों को लॉक करने के कई प्रश्न होने पर एक प्रक्रिया किसी अन्य पर इंतजार कर रही है, तो डेडलॉक की संभावना पैदा होती है।
एक टेबल-स्तरीय विकल्प है, LOCK_ESCALATION
, एसक्यूएल 2008 में नया, जो लॉक एस्केलेशन के नियंत्रण की अनुमति देता है। डिफ़ॉल्ट, "टेबल" ताले टेबल स्तर पर सभी तरह से बढ़ने की अनुमति देता है। अक्षम अधिकांश मामलों में पूरी तालिका में लॉक वृद्धि को रोकता है। ऑटो तालिका तालिका को अनुमति देता है सिवाय इसके कि तालिका को विभाजित किया गया है, इस स्थिति में ताले केवल विभाजन स्तर तक ही बने होते हैं। अधिक जानकारी के लिए this blog post देखें।
मुझे संदेह है कि आईडीई इस तालिका को फिर से बनाते समय इस सेटिंग को जोड़ता है क्योंकि तालिका SQL 2008 में डिफ़ॉल्ट है। ध्यान दें कि LOCK_ESCALATION SQL 2005 में समर्थित नहीं है, इसलिए इसे चलाने का प्रयास करते समय आपको इसे पट्टी करने की आवश्यकता होगी 2005 के उदाहरण पर लिपि। साथ ही, चूंकि तालिका डिफ़ॉल्ट है, इसलिए आप अपनी स्क्रिप्ट को फिर से चलाने पर सुरक्षित रूप से उस पंक्ति को हटा सकते हैं।
भी ध्यान रखें कि, एसक्यूएल 2005 में से पहले इस सेटिंग मौजूद था, सभी ताले दूसरे शब्दों में तालिका level-- को बढ़ा सकता है, "टेबल" एसक्यूएल पर केवल सेटिंग था 2005
स्रोत
2009-11-09 20:52:56
एमएसडीएन मंचों पर भी डुप्लिकेट पोस्ट: http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/e96aa19e-d72c-46af-b2e8-4bf54de09440 –
@ जस्टिनग्रेंट: क्या यह अभिव्यक्ति हो सकती है 'तालिका बनाएं' कथन के साथ संयुक्त हो जाएं? –
@dma_k - यह विकल्प 'CREATE तालिका 'के लिए प्रासंगिक नहीं है क्योंकि तालिका अभी तक मौजूद नहीं है इसलिए लॉक करने के लिए कुछ भी नहीं है। –