जब आप दो कथनों को एक साथ (एक चयन और अद्यतन) चलाते हैं तो वास्तविक व्यवहार मूल रूप से यादृच्छिक होगा। ऐसा इसलिए है क्योंकि संचालन में से कोई भी तात्कालिक नहीं है। सरल बनाने के लिए, अपनी तालिका को एक सूची पर विचार करें और चयन एक समय में एक पंक्ति को देखकर, इस सूची को घुमा रहा है। अद्यतन एक या एक से अधिक पंक्तियों को अपडेट करने का भी प्रयास कर रहा है। जब अद्यतन के पीछे पंक्ति को अद्यतन करने का प्रयास कर रहा है तो चयन करें कुछ भी नहीं होता अद्यतन पंक्ति जिस पर चयन लग रही है अभी अद्यतन करने के लिए कोशिश कर रहा है, तो तब नवीनीकृत करें के लिए प्रतीक्षा करने पर स्थानांतरित करने के लिए, जो बहुत बहुत बहुत तेजी से होगा होगा और अद्यतन अनवरोधित और सफल होगा, जबकि चयन आगे बढ़ रहा है। लेकिन अगर अद्यतन आगे चयन को अद्यतन कर रहा है तो अद्यतन सफल हो जाएगा और बाद में, अंततः अंत में इस पंक्ति तक पहुंच जाएगा और अवरुद्ध हो जाएगा।अब चयन को का इंतजार करना होगा जब तक कि UPDATE पर लेनदेन नहीं करता है।
यह सरलीकृत कहानी है। वास्तविक जीवन बहुत जटिल है। चयन में एकाधिक पढ़े गए अंक (समांतर योजनाएं) हो सकती हैं। चयन और अद्यतन दोनों एक पहुंच पथ चुनने के अधीन हैं, जिसका मतलब पंक्तियों का पता लगाने के लिए एक या अधिक माध्यमिक अनुक्रमणिका का उपयोग करना है। जटिल प्रश्नों में ऑपरेटर हो सकते हैं जो एक तालिका में एकाधिक लुकअप का कारण बनते हैं (उदाहरण के लिए।)। चयन और अद्यतन दोनों बीएलओबी डेटा लाने के लिए बुकमार्क लुकअप कर सकते हैं, जो महत्वपूर्ण रूप से लॉकिंग व्यवहार को बदलता है। कार्डिनालिटी अनुमान से उच्च ग्रॅन्युलैरिटी लॉक मोड (जैसे तालिका स्तर साझा लॉक) पर SELECT को चलाने का कारण हो सकता है। अद्यतन लॉक वृद्धि को ट्रिगर कर सकता है, और वृद्धि विफल हो सकती है या सफल हो सकती है। Choosing different access paths can lead to deadlock। False lock contention can occur due to hash collisions। इसमें केवल एक असंख्य चर हैं जिनके बारे में कोई कहना है। और मैंने उच्च अलगाव स्तर का उल्लेख भी नहीं किया (दोहराने योग्य पढ़ने, धारावाहिक)।
शायद आपको SNAPSHOT अलगाव का उपयोग करना चाहिए और इस मुद्दे के बारे में चिंता करना बंद कर देना चाहिए?
स्रोत
2012-08-06 14:03:57
आप किस लेनदेन अलगाव स्तर के बारे में बात कर रहे हैं? – Oded
@ ओडेड डिफ़ॉल्ट - मुझे विश्वास है कि यह पढ़ा जाता है। –
* "वर्तमान में मुझे गंदे डेटा की परवाह नहीं है" *: सावधान रहें [आप क्या चाहते हैं] (http://blogs.msdn.com/b/sqlcat/archive/2007/02/01/previously-committed- पंक्तियों-सकता होने वाली चूक-अगर-nolock-संकेत-है-used.aspx)। –