खोज…


वाक्य - विन्यास

  • सेट परिवहन अलगाव की स्थिति {पढ़ें बेची गई | READ COMMITTED | दोहराव वाला READ | SNAPSHOT | अनुक्रमिक} [; ]

टिप्पणियों

MSDN संदर्भ: सेट परिवहन अलगाव स्तर

बिना पढ़े लिखे

SQL सर्वर 2008 R2
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

यह सबसे अधिक अनुमेय अलगाव स्तर है, जिसमें यह किसी भी ताले का कारण नहीं बनता है। यह निर्दिष्ट करता है कि बयान सभी पंक्तियों को पढ़ सकते हैं, जिसमें पंक्तियों को भी शामिल किया गया है जो लेनदेन में लिखे गए हैं लेकिन अभी तक प्रतिबद्ध नहीं हैं (यानी, वे अभी भी लेनदेन में हैं)। यह अलगाव स्तर "गंदे रीड्स" के अधीन हो सकता है।

कमिटेड पढ़ें

SQL सर्वर 2008 R2
SET TRANSACTION ISOLATION LEVEL READ COMMITTED

यह अलगाव स्तर 2 सबसे अधिक अनुमेय है। यह गंदे रीड्स को रोकता है। READ_COMMITTED_SNAPSHOT की सेटिंग पर READ COMMITTED का व्यवहार निर्भर करता है:

  • यदि ऑफ़ (डिफ़ॉल्ट सेटिंग) पर सेट किया जाता है, तो लेन-देन अन्य लेन-देन को मौजूदा लेनदेन द्वारा उपयोग की जाने वाली पंक्तियों को संशोधित करने से रोकने के लिए साझा ताले का उपयोग करता है, साथ ही साथ अन्य लेनदेन द्वारा संशोधित पंक्तियों को पढ़ने से वर्तमान लेनदेन को अवरुद्ध करता है।

  • यदि इसे चालू किया जाता है, तो READCOMMITTEDLOCK तालिका संकेत का उपयोग READ COMMITTED मोड में चल रहे लेन-देन के लिए पंक्ति संस्करण के बजाय साझा लॉकिंग का अनुरोध करने के लिए किया जा सकता है।

नोट: READ COMMITTED डिफ़ॉल्ट SQL सर्वर व्यवहार है।

"गंदे रीड्स" क्या हैं?

डर्टी रीड्स (या अनक्मिटेड रीड्स) उन पंक्तियों के रीड होते हैं जिन्हें ओपन ट्रांजेक्शन द्वारा संशोधित किया जा रहा है।

इस व्यवहार को 2 अलग-अलग प्रश्नों का उपयोग करके दोहराया जा सकता है: एक लेन-देन खोलने के लिए और कुछ डेटा को बिना किसी टेबल पर लिखने के लिए, दूसरा इस अलगाव स्तर के साथ लिखे जाने वाले डेटा (लेकिन अभी तक प्रतिबद्ध नहीं) का चयन करने के लिए।

प्रश्न 1 - एक लेनदेन तैयार करें लेकिन इसे समाप्त न करें:

CREATE TABLE dbo.demo (
    col1 INT,
    col2 VARCHAR(255)
);
GO
--This row will get committed normally:
BEGIN TRANSACTION;
    INSERT INTO dbo.demo(col1, col2) 
    VALUES (99, 'Normal transaction');
COMMIT TRANSACTION;
--This row will be "stuck" in an open transaction, causing a dirty read
BEGIN TRANSACTION;
    INSERT INTO dbo.demo(col1, col2) 
    VALUES (42, 'Dirty read');
--Do not COMMIT TRANSACTION or ROLLBACK TRANSACTION here

प्रश्न 2 - खुले लेनदेन सहित पंक्तियों को पढ़ें:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT * FROM dbo.demo;

यह दिखाता है:

col1        col2
----------- ---------------------------------------
99          Normal transaction
42          Dirty read

पुनश्च: इस डेमो डेटा को साफ करने के लिए मत भूलना:

COMMIT TRANSACTION;
DROP TABLE dbo.demo;
GO

बार-बार पढ़ने योग्य

SQL सर्वर 2008 R2
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

यह ट्रांजैक्शन आइसोलेशन लेवल READ COMMITTED से थोड़ा कम अनुमेय है, जिसमें शेयर किए गए लॉक को ट्रांजेक्शन में प्रत्येक स्टेटमेंट द्वारा पढ़े गए सभी डेटा पर रखा जाता है और ट्रांजैक्शन पूरा होने तक होल्ड किया जाता है, जैसा कि प्रत्येक स्टेटमेंट के बाद रिलीज होने का विरोध किया जाता है।

नोट: इस विकल्प का उपयोग केवल तब करें जब आवश्यक हो, क्योंकि डेटाबेस प्रदर्शन में गिरावट के साथ-साथ READ COMMITTED तुलना में गतिरोध की संभावना अधिक होती है।

स्नैपशॉट

SQL सर्वर 2008 R2
SET TRANSACTION ISOLATION LEVEL SNAPSHOT

निर्दिष्ट करता है कि किसी लेनदेन में किसी स्टेटमेंट द्वारा पढ़ा जाने वाला डेटा ट्रांजेक्शनल रूप से सुसंगत संस्करण होगा, जो ट्रांजैक्शन की शुरुआत में मौजूद था, यानी यह केवल उस डेटा को पढ़ेगा, जो ट्रांजैक्शन शुरू होने से पहले कमिट किया गया है।

SNAPSHOT लेनदेन पढ़े जा रहे डेटा पर किसी भी ताले का अनुरोध या कारण नहीं देते हैं, क्योंकि यह केवल उस डेटा के संस्करण (या स्नैपशॉट) को पढ़ रहा है, जो उस समय लेनदेन शुरू हुआ था।

SNAPSHOT आइसोलेशन स्तर में चल रहा एक लेन-देन केवल अपने डेटा परिवर्तन को पढ़ता है जबकि यह चल रहा है। उदाहरण के लिए, एक लेन-देन कुछ पंक्तियों को अद्यतन कर सकता है और फिर अद्यतन पंक्तियों को पढ़ सकता है, लेकिन यह परिवर्तन केवल वर्तमान लेनदेन के लिए दिखाई देगा जब तक कि यह प्रतिबद्ध नहीं है।


नोट: ALLOW_SNAPSHOT_ISOLATION डेटाबेस विकल्प को SNAPSHOT अलगाव स्तर का उपयोग करने से पहले चालू किया जाना चाहिए।

serializable

SQL सर्वर 2008 R2
SET TRANSACTION ISOLATION LEVEL SERIALIZEABLE

यह अलगाव स्तर सबसे अधिक प्रतिबंधक है। यह अनुरोध करता है कि लेन-देन में प्रत्येक कथन द्वारा पढ़े जाने वाले प्रमुख मानों की श्रेणी लॉक हो जाती है। इसका अर्थ यह भी है कि यदि अन्य पंक्तियों को वर्तमान लेन-देन द्वारा लॉक की गई सीमा में हैं, तो अन्य लेन-देन से INSERT विवरण अवरुद्ध हो जाएंगे।

यह विकल्प सेट करने जैसा ही होता है HOLDLOCK सभी में सभी टेबल पर SELECT के लेनदेन में बयान।


नोट: इस ट्रांजैक्शन आइसोलेशन में सबसे कम कंसिस्टेंसी है और इसका इस्तेमाल केवल आवश्यक होने पर ही किया जाना चाहिए।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow