ताला वृद्धि क्या है?


47

मुझे एक साक्षात्कार में यह सवाल पूछा गया था और इसका कोई जवाब नहीं था। क्या यहाँ कोई समझा सकता है?

जवाबों:


45

DB लॉक पंक्तियों, पृष्ठों या संपूर्ण तालिकाओं या अनुक्रमित पर मौजूद हो सकते हैं। जब कोई लेन-देन प्रगति पर होता है, तो लेनदेन द्वारा रखे गए लॉक संसाधनों को ले लेते हैं। लॉक एस्केलेशन वह जगह है जहां सिस्टम एक से अधिक स्तरों में एक से अधिक तालों को समेकित करता है (उदाहरण के लिए एक पंक्ति या एक पृष्ठ के लिए कई पंक्तियों को एक संपूर्ण तालिका में समेकित करना) आमतौर पर बड़ी संख्या में ठीक-ठाक ताले द्वारा लिए गए संसाधनों को पुनर्प्राप्त करना।

यह स्वचालित रूप से ऐसा करेगा, हालांकि आप उस विशेष तालिका पर ताला वृद्धि के लिए नीति को नियंत्रित करने के लिए तालिकाओं पर झंडे सेट कर सकते हैं (पंक्ति में पुस्तकों में परिवर्तन देखें)। विशेष रूप से, समय से पहले या अत्यधिक उत्सुक ताला वृद्धि Sybase और SQL सर्वर के पुराने संस्करणों पर एक समस्या हुआ करती थी जब आपके पास एक ही पृष्ठ में अलग-अलग पंक्तियों को लिखने की दो प्रक्रियाएं समवर्ती थीं। यदि आप बहुत पीछे जाते हैं (IIRC SQL Server 6.5) SQL सर्वर में वास्तव में पंक्ति लॉकिंग नहीं थी, लेकिन केवल टेबल या पेज लॉक कर सकते थे। जहां ऐसा हुआ, आप एक ही पृष्ठ में अभिलेखों के आवेषण के बीच विवाद प्राप्त कर सकते हैं; अक्सर आप टेबल पर एक गुच्छेदार सूचकांक डालते हैं, इसलिए नए आवेषण विभिन्न पृष्ठों पर जाते हैं।


3
यह भी ध्यान दिया जाना चाहिए कि सर्वर के बढ़ने पर हमारा कोई नियंत्रण नहीं है।

अब हम करते हैं। इसे T1211 कहते हैं।
यहोशू

@ जोशुआ, ट्रेस फ्लैग 1211 का उपयोग लॉक एस्केलेशन को निष्क्रिय करने के लिए किया जाता है। एसक्यूएल सर्वर को विशिष्ट समय पर आगे बढ़ने के लिए बताने के लिए हमारे पास कोई रास्ता नहीं है।
बस एक शिक्षार्थी

10
रो लॉक्स को पेज लॉक्स में नहीं बढ़ाया जाता है, बल्कि सीधे टेबल लॉक्स पर लगाया जाता है।
मनोज पांडेय

यह सच है कि मनोज ने क्या कहा। कम अनुभवी SQL सर्वर उपयोगकर्ताओं को गुमराह करने से बचने के लिए आपको अपने उत्तर में उस भाग को सही करना चाहिए
NikolaD

20

यह कम मोटे अनाज वाले कई महीन दाने वाले तालों को परिवर्तित करके, सिस्टम ओवरहेड को कम करने की एक विधि है। अधिक विस्तृत जानकारी यहाँ और यहाँ मिल सकती है

उदाहरण के लिए, यदि आपके पास एक मेज पर विशिष्ट पंक्तियों पर कई (आमतौर पर सैकड़ों या अधिक) ताले हैं, तो एक बार जब आप अपने अधिकतम अनुमत तालों को पार कर लेते हैं, तो इनका पूरे मेज पर ताला लगाने के लिए विनिमय किया जा सकता है।


11

SQL सर्वर मेमोरी ओवरहेड को कम करने के लिए लॉक एस्केलेशन करता है , कई बारीक-निम्न स्तर के ताले को मोटे-अनाज वाले उच्च स्तर के लॉक में परिवर्तित करके।

  • रो लॉक्स को हमेशा टेबल लॉक्स तक बढ़ाया जाता है, और
  • पेज लॉक को टेबल लॉक्स में भी बढ़ाया जाता है।

यह एक मिथक है कि रो ताले पृष्ठ के ताले तक बढ़े हुए हैं , जो @ConcernedOfTunbridgeWells द्वारा ऊपर वर्णित है, गलत है।

यदि कोई तालिका बहुत कम पंक्ति-अद्यतनों वाली है, तो SQL इंजन उन पंक्तियों या पंक्ति-पृष्ठ पर रो-लॉक लेने की कोशिश करेगा। बता दें कि इसने रो-लॉक कर लिया है। लेकिन यदि पंक्ति-अद्यतन थ्रेशोल्ड (~ 5k लॉक) को बढ़ाता है, तो कई रो-लॉक लेने के बजाय यह सिंगल टेबल-लॉक लेता है। इस प्रकार, यह कई रो-लॉक को रिलीज़ करके और एक ही टेबल-लॉक को हटाकर मेमोरी ओवरहेड को कम करता है, लेकिन कंसीडर को बढ़ाता है। पेज लॉक के साथ भी यही होता है।

लॉक एस्केलेशन सीमा कम से कम 5000 ताले है, और कई कारकों पर निर्भर करता है, लॉक वृद्धि की एक विस्तृत विवरण यहाँ MSDN बोल में उल्लेख किया गया है: https://technet.microsoft.com/en-us/library/ms184286(v = sql.105) .aspx


5

लॉक एस्केलेशन का मतलब लॉक को अधिक प्रतिबंधात्मक मोड में बदलना है। यह अक्सर डेटाबेस में देखा जाता है। क्वेरी में "साझा" के लिए एक संसाधन लॉक हो सकता है और इसे अपडेट करने के लिए "अनन्य" तक बढ़ा सकता है।

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