साझाकरण बंद को IsolationLevel.ReadUncommitted पर जारी किया गया


10

मैंने पढ़ा कि यदि मैं IsolationLevel.ReadUncommitted का उपयोग करता हूं, तो क्वेरी को कोई भी लॉक जारी नहीं करना चाहिए। हालाँकि, जब मैंने इसका परीक्षण किया, तो मैंने निम्नलिखित ताला देखा:

Resource_Type: HOBT
Request_Mode: S (साझा)

HOBT लॉक क्या है? HBT (हीप या बाइनरी ट्री लॉक) से संबंधित कुछ?

मुझे अभी भी एस लॉक क्यों मिलेगा?

अलगाव स्तर स्नैपशॉट विकल्प को चालू किए बिना क्वेरी करते समय मैं साझा लॉकिंग से कैसे बचूँ?

मैं SQLServer 2008 पर यह परीक्षण कर रहा हूं, और स्नैपशॉट विकल्प बंद करना है। क्वेरी केवल एक चयन करता है।

मैं देख सकता हूं कि Sch-S की आवश्यकता है, हालांकि SQL सर्वर मेरी लॉक क्वेरी में इसे नहीं दिखा रहा है। यह कैसे आता है अभी भी एक साझा लॉक जारी करता है? इसके अनुसार:

सेट परिवहन अलगाव स्तर (लेनदेन-एसक्यूएल)

READ UNCOMMITTEDवर्तमान लेनदेन द्वारा पढ़े गए डेटा को संशोधित करने से अन्य लेनदेन को रोकने के लिए , स्तर पर चल रहे लेनदेन साझा ताले जारी नहीं करते हैं।

इसलिए मैं थोड़ा उलझन में हूं।

जवाबों:


13

HOBT लॉक क्या है?

एक बी-ट्री (इंडेक्स) या ढेर डेटा पृष्ठों को एक तालिका में संरक्षित करने वाला लॉक जिसमें क्लस्टर इंडेक्स नहीं होता है।

मुझे अभी भी एस लॉक क्यों मिलेगा?

यह ढेर पर होता है। उदाहरण

SET NOCOUNT ON;

DECLARE @Query nvarchar(max) = 
   N'DECLARE @C INT; 
     SELECT @C = COUNT(*) FROM master.dbo.MSreplication_options';

/*Run once so compilation out of the way*/
EXEC(@Query);

DBCC TRACEON(-1,3604,1200) WITH NO_INFOMSGS;

PRINT 'READ UNCOMMITTED';
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
EXEC(@Query);

PRINT 'READ COMMITTED';
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
EXEC(@Query);

DBCC TRACEOFF(-1,3604,1200) WITH NO_INFOMSGS;

उत्पादन READ UNCOMMITTED

Process 56 acquiring Sch-S lock on OBJECT: 1:1163151189:0  (class bit0 ref1) result: OK

Process 56 acquiring S lock on HOBT: 1:72057594038910976 [BULK_OPERATION] (class bit0 ref1) result: OK

Process 56 releasing lock on OBJECT: 1:1163151189:0 

उत्पादन READ COMMITTED

Process 56 acquiring IS lock on OBJECT: 1:1163151189:0  (class bit0 ref1) result: OK

Process 56 acquiring IS lock on PAGE: 1:1:169 (class bit0 ref1) result: OK

Process 56 releasing lock on PAGE: 1:1:169

Process 56 releasing lock on OBJECT: 1:1163151189:0 

पॉल रान्डल के हवाले से इस लेख के अनुसार इस BULK_OPERATIONसाझा एचओबीटी लॉक को लेने का कारण है कि बिना पृष्ठ के पठन को रोकना।


5

ReadUncommitted अलगाव स्तर ताले का अधिग्रहण करता है। स्कीमा स्थिरता ताले ऑब्जेक्ट को क्वेरी निष्पादित करते समय परिवर्तित होने से रोकते हैं। यह लॉक स्नैपशॉट और read_committed_snapshot (RCSI) सहित सभी अलगाव स्तरों के तहत प्राप्त किया जाता है। से लॉक मोड :

स्कीमा ताले

डेटाबेस इंजन एक टेबल डेटा डेफिनेशन लैंग्वेज (DDL) ऑपरेशन के दौरान स्कीमा मॉडिफिकेशन (Sch-M) लॉक का उपयोग करता है, जैसे कॉलम जोड़ना या टेबल को गिराना। उस समय के दौरान जब यह आयोजित होता है, तो Sch-M लॉक टेबल पर समवर्ती पहुंच को रोकता है। इसका मतलब है कि जब तक लॉक जारी नहीं किया जाता है, तब तक Sch-M लॉक सभी बाहरी ऑपरेशनों को अवरुद्ध करता है।

कुछ डेटा हेरफेर भाषा (डीएमएल) संचालन, जैसे कि टेबल ट्रंकेशन, समवर्ती संचालन द्वारा प्रभावित तालिकाओं तक पहुंच को रोकने के लिए Sch-M तालों का उपयोग करते हैं।

डेटाबेस इंजन क्वेरी का संकलन और निष्पादित करते समय स्कीमा स्थिरता (SCH-S) लॉक का उपयोग करता है। Sch-S ताले अनन्य (X) ताले सहित किसी भी लेन-देन के ताले को ब्लॉक नहीं करते हैं। इसलिए, एक टेबल पर एक्स ताले वाले अन्य लेनदेन, एक क्वेरी संकलित किए जाने के दौरान चलते रहते हैं। हालांकि, समवर्ती डीडीएल संचालन, और समवर्ती डीएमएल संचालन जो कि Sch-M तालों का अधिग्रहण करते हैं, उन्हें मेज पर नहीं किया जा सकता है।

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