मुझे एक साक्षात्कार में यह सवाल पूछा गया था और इसका कोई जवाब नहीं था। क्या यहाँ कोई समझा सकता है?
मुझे एक साक्षात्कार में यह सवाल पूछा गया था और इसका कोई जवाब नहीं था। क्या यहाँ कोई समझा सकता है?
जवाबों:
DB लॉक पंक्तियों, पृष्ठों या संपूर्ण तालिकाओं या अनुक्रमित पर मौजूद हो सकते हैं। जब कोई लेन-देन प्रगति पर होता है, तो लेनदेन द्वारा रखे गए लॉक संसाधनों को ले लेते हैं। लॉक एस्केलेशन वह जगह है जहां सिस्टम एक से अधिक स्तरों में एक से अधिक तालों को समेकित करता है (उदाहरण के लिए एक पंक्ति या एक पृष्ठ के लिए कई पंक्तियों को एक संपूर्ण तालिका में समेकित करना) आमतौर पर बड़ी संख्या में ठीक-ठाक ताले द्वारा लिए गए संसाधनों को पुनर्प्राप्त करना।
यह स्वचालित रूप से ऐसा करेगा, हालांकि आप उस विशेष तालिका पर ताला वृद्धि के लिए नीति को नियंत्रित करने के लिए तालिकाओं पर झंडे सेट कर सकते हैं (पंक्ति में पुस्तकों में परिवर्तन देखें)। विशेष रूप से, समय से पहले या अत्यधिक उत्सुक ताला वृद्धि Sybase और SQL सर्वर के पुराने संस्करणों पर एक समस्या हुआ करती थी जब आपके पास एक ही पृष्ठ में अलग-अलग पंक्तियों को लिखने की दो प्रक्रियाएं समवर्ती थीं। यदि आप बहुत पीछे जाते हैं (IIRC SQL Server 6.5) SQL सर्वर में वास्तव में पंक्ति लॉकिंग नहीं थी, लेकिन केवल टेबल या पेज लॉक कर सकते थे। जहां ऐसा हुआ, आप एक ही पृष्ठ में अभिलेखों के आवेषण के बीच विवाद प्राप्त कर सकते हैं; अक्सर आप टेबल पर एक गुच्छेदार सूचकांक डालते हैं, इसलिए नए आवेषण विभिन्न पृष्ठों पर जाते हैं।
यह कम मोटे अनाज वाले कई महीन दाने वाले तालों को परिवर्तित करके, सिस्टम ओवरहेड को कम करने की एक विधि है। अधिक विस्तृत जानकारी यहाँ और यहाँ मिल सकती है ।
उदाहरण के लिए, यदि आपके पास एक मेज पर विशिष्ट पंक्तियों पर कई (आमतौर पर सैकड़ों या अधिक) ताले हैं, तो एक बार जब आप अपने अधिकतम अनुमत तालों को पार कर लेते हैं, तो इनका पूरे मेज पर ताला लगाने के लिए विनिमय किया जा सकता है।
SQL सर्वर मेमोरी ओवरहेड को कम करने के लिए लॉक एस्केलेशन करता है , कई बारीक-निम्न स्तर के ताले को मोटे-अनाज वाले उच्च स्तर के लॉक में परिवर्तित करके।
यह एक मिथक है कि रो ताले पृष्ठ के ताले तक बढ़े हुए हैं , जो @ConcernedOfTunbridgeWells द्वारा ऊपर वर्णित है, गलत है।
यदि कोई तालिका बहुत कम पंक्ति-अद्यतनों वाली है, तो SQL इंजन उन पंक्तियों या पंक्ति-पृष्ठ पर रो-लॉक लेने की कोशिश करेगा। बता दें कि इसने रो-लॉक कर लिया है। लेकिन यदि पंक्ति-अद्यतन थ्रेशोल्ड (~ 5k लॉक) को बढ़ाता है, तो कई रो-लॉक लेने के बजाय यह सिंगल टेबल-लॉक लेता है। इस प्रकार, यह कई रो-लॉक को रिलीज़ करके और एक ही टेबल-लॉक को हटाकर मेमोरी ओवरहेड को कम करता है, लेकिन कंसीडर को बढ़ाता है। पेज लॉक के साथ भी यही होता है।
लॉक एस्केलेशन सीमा कम से कम 5000 ताले है, और कई कारकों पर निर्भर करता है, लॉक वृद्धि की एक विस्तृत विवरण यहाँ MSDN बोल में उल्लेख किया गया है: https://technet.microsoft.com/en-us/library/ms184286(v = sql.105) .aspx