"लॉक एस्केलेशन "यह है कि SQL बड़े अपडेट के लिए लॉकिंग को कैसे संभालता है। जब SQL बहुत सारी पंक्तियों को बदलने जा रहा है, तो डेटाबेस इंजन के लिए कई छोटी चीजों (जैसे पंक्ति ताले) को लॉक करने के बजाय कम, बड़े ताले (जैसे पूरी तालिका) लेना अधिक कुशल है। ।
लेकिन यह तब समस्याग्रस्त हो सकता है जब आपके पास एक बड़ी टेबल हो, क्योंकि पूरी टेबल पर ताला लगाने से अन्य प्रश्नों को लंबे समय तक लॉक किया जा सकता है। यह ट्रेडऑफ़ है:कई छोटे-ग्रैन्युलैरिटी ताले कम (या एक) मोटे अनाज वाले ताले की तुलना में धीमे होते हैं, और एक तालिका के विभिन्न हिस्सों को लॉक करने वाली एकाधिक क्वेरी होने से एक प्रक्रिया दूसरी पर प्रतीक्षा कर रही है, तो गतिरोध की संभावना पैदा होती है।
एक टेबल-स्तरीय विकल्प है, LOCK_ESCALATION
, SQL 2008 में नया है, जो लॉक एस्केलेशन को नियंत्रित करने की अनुमति देता है। डिफ़ॉल्ट, "टेबल" ताले को टेबल स्तर तक सभी तरह से आगे बढ़ने की अनुमति देता है। DISABLE ज्यादातर मामलों में संपूर्ण तालिका में लॉक एस्केलेशन को रोकता है। ऑटो टेबल लॉक की अनुमति देता है, सिवाय इसके कि टेबल को विभाजित किया गया है, इस स्थिति में लॉक केवल विभाजन स्तर तक ही बनाए जाते हैं। देखें यह ब्लॉग पोस्टए> अधिक जानकारी के लिए।
मुझे संदेह है कि आईडीई तालिका को फिर से बनाते समय इस सेटिंग को जोड़ता है क्योंकि SQL 2008 में TABLE डिफ़ॉल्ट है। ध्यान दें कि LOCK_ESCALATION SQL 2005 में समर्थित नहीं है, इसलिए स्क्रिप्ट को चलाने का प्रयास करते समय आपको इसे पट्टी करने की आवश्यकता होगी। 2005 का उदाहरण। साथ ही, चूंकि TABLE डिफ़ॉल्ट है, आप अपनी स्क्रिप्ट को फिर से चलाते समय उस लाइन को सुरक्षित रूप से हटा सकते हैं।
यह भी ध्यान दें कि, इस सेटिंग के मौजूद होने से पहले SQL 2005 में, सभी ताले तालिका स्तर तक बढ़ सकते थे-- दूसरे शब्दों में, SQL 2005 पर "टेबल" ही एकमात्र सेटिंग थी।