SQL सर्वर किसी तालिका का चयन करते समय ताले को जिस क्रम में लेता है उसका निर्धारण कैसे करता है?


10

मेरे पास दो संग्रहित प्रक्रियाएं हैं जो सिस्टम के लोड के तहत डेडलॉक कर रही हैं। Proc A एक तालिका से चयन कर रहा है जबकि Proc B उसी तालिका में सम्मिलित हो रहा है। लॉक ग्राफ़ दिखा रहा है कि Proc A में S मोड पेज लॉक है जो Proc B के लिए IX मोड लॉक चाहता है, Proc A हालांकि एक अलग पेज के लिए S मोड पेज लॉक का इंतज़ार कर रहा है कि Proc B में पहले से IX मोड पेज लॉक है। ।

स्पष्ट रूप से यह सुनिश्चित करके हल किया जा सकता है कि दोनों प्रश्न एक ही क्रम में तालिका में पृष्ठों को लॉक करते हैं, लेकिन मैं यह पता नहीं लगा सकता कि ऐसा कैसे करें।

मेरा प्रश्न है: INSERTs और चयन करते समय SQL सर्वर किस प्रकार पृष्ठों को लॉक करने के लिए निर्धारित करता है और आप इस व्यवहार को कैसे संशोधित कर सकते हैं?

जवाबों:


2

SQL सर्वर कैसे निर्धारित करता है कि INSERTs और SELECTs करते समय पृष्ठों को लॉक करने का क्या क्रम है

अनिर्धारित - आंतरिक प्रसंस्करण द्वारा किया गया और क्वेरी ऑप्टिमाइज़र आउटपुट पर निर्भर करता है।

और आप इस व्यवहार को कैसे संशोधित कर सकते हैं?

अपने अलगाव पर नियंत्रण रखें। यदि आप लिखने के लिए पढ़ते हैं, तो SQL सर्वर को तुरंत राइट लॉक प्राप्त करने के लिए कहें। प्वाइंट बंद हो गया।


1

वर्तमान में, खरीद ए के पास एक साझा ताला है।

"संसाधन पर साझा (एस) ताले मौजूद होते हुए कोई अन्य लेनदेन डेटा को संशोधित नहीं कर सकता है।" http://msdn.microsoft.com/en-us/library/aa213039%28v=sql.80%29.aspx

यदि आप sql 2005 या उच्चतर पर हैं, तो स्नैपशॉट अलगाव का उपयोग करने का प्रयास करें।

"स्नैपशॉट अलगाव स्तर लेन-देन स्तर पढ़ने की स्थिरता प्रदान करने के लिए पंक्ति संस्करण का उपयोग करता है। पढ़ें ऑपरेशन कोई पृष्ठ या पंक्ति ताले प्राप्त नहीं करते हैं; केवल SCH-S टेबल लॉक प्राप्त किए जाते हैं। जब किसी अन्य लेनदेन द्वारा संशोधित पंक्तियों को पढ़ते हैं, तो वे पंक्ति के संस्करण को पुनः प्राप्त करते हैं। जब लेन-देन शुरू हुआ था तब मौजूद था। आप केवल एक डेटाबेस के खिलाफ स्नैपशॉट अलगाव का उपयोग कर सकते हैं जब ALLOW_SNAPSHOT_ISOLATION डेटाबेस विकल्प चालू होता है। डिफ़ॉल्ट रूप से, यह विकल्प उपयोगकर्ता डेटाबेस के लिए OFF सेट होता है। " http://msdn.microsoft.com/en-us/library/ms189122.aspx

चूँकि केवल Sch-S ताले अधिगृहीत हैं, इसलिए आपका 'पढ़ा हुआ' आपके '' ब्लॉक '' को लिखने में सक्षम नहीं होना चाहिए।

"स्कीमा स्थिरता (Sch-S) ताले अनन्य (X) ताले सहित किसी भी लेन-देन के ताले को ब्लॉक नहीं करते हैं।" http://msdn.microsoft.com/en-us/library/ms189122.aspx

ध्यान रखें, स्नैपशॉट अलगाव स्तर पंक्ति संस्करण के लिए tempdb का भारी उपयोग करता है, इसलिए इसे उचित रूप से आकार दें और tempdb डिस्क रणनीतियों के लिए सर्वोत्तम प्रथाओं से चिपके रहें।

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