SQL सर्वर - नॉन-ब्लॉकिंग सेलेक्ट स्टेटमेंट के लिए क्या आइसोलेशन लेवल है?


9

मेरे पास लंबे समय तक चलने वाला लेनदेन है (जिसे कहा जाता है, T1), जो SQL Server 2008 R2 में एक टेबल पर कुछ डिलीट, अपडेट और इंसर्ट करता है। इसी समय, एक अन्य प्रक्रिया समय-समय पर इस तालिका से चुनिंदा कथन चलाती है।

डिफ़ॉल्ट आइसोलेशन सेटिंग्स (READ COMMITTED I think?) के तहत, T1 किसी भी चुनिंदा स्टेटमेंट को तब तक चलने से रोकता है जब तक ट्रांजैक्शन कमिट नहीं होता या वापस रोल नहीं किया जाता।

लेन-देन चल रहा है, तब भी मैं जो देखना चाहता हूं वह संगत डेटा पर काम करने के लिए चुनिंदा बयानों के लिए है। मेरा मानना ​​है कि स्नैपशॉट अलगाव मदद कर सकता है, लेकिन मुझे यकीन नहीं है कि मैं सही दिशा में जा रहा हूं। यह इस आवेदन के लिए सबसे अच्छा अलगाव स्तर होगा?

दूसरे, मेरे पास उस प्रक्रिया पर कोई नियंत्रण नहीं है जो चुनिंदा बयानों को बुला रही है, लेकिन मेरे पास टी 1 को कॉल करने वाले .NET एप्लिकेशन पर नियंत्रण नहीं है। क्या किसी भी अलगाव स्तर के बदलावों का चयन दोनों कथनों और T1 पर करना आवश्यक होगा, या यह एक अलग अलगाव स्तर के रूप में T1 को चिह्नित करने के लिए पर्याप्त होगा?

जवाबों:


8

एक आदर्श दुनिया में आपके पास दो विकल्प होंगे, SNAPSHOT और READ COMMITTED SNAPSHOT (RCSI)। अपने कार्यभार के लिए उपयुक्त निर्णय लेने से पहले सुनिश्चित करें कि आप लेन-देन अलगाव के स्तर की मूल बातें समझते हैं । विशेष रूप से उन विभिन्न परिणामों से अवगत रहें, जिन्हें आप RCSI में जाने के परिणामस्वरूप देख सकते हैं।

ऐसा लगता है कि यह एक आदर्श दुनिया नहीं है क्योंकि आपके पास उस एप्लिकेशन पर कोई नियंत्रण नहीं है जो चुनिंदा कथन उत्पन्न कर रहा है। उस स्थिति में, आपका एकमात्र विकल्प है कि आप डेटाबेस के लिए RCSI को इस तरह से सक्षम करें कि चयन स्वचालित रूप से READ COMMITTED के बजाय RCSI का उपयोग करेगा।


6

सही, लेन-देन शुरू होने से पहले लगातार, कमिटेड डेटा प्राप्त करने के लिए स्नैपशॉट अलगाव का उपयोग करें।

READ UNCOMMITTED आइसोलेशन (उर्फ़ नोलक हिंट) डर्टज़, असंगत डेटा को पढ़ेगा

जब आप SNAPSHOT अलगाव को सक्षम करते हैं, तो यह आगे बढ़ने वाले सभी चयनों के लिए प्रभावी होता है। आप ALTER DATABASEइस मामले में READ_COMMITTED_SNAPSHOT के साथ चलते हैं

संपादित करें: जोड़ा गया लिंक + अलर्ट (मेरे बोल्ड) का उद्धरण

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

और स्नैपशॉट अलगाव का उपयोग करने से (मेरा साहसिक)

READ_COMMITTED_SNAPSHOT डेटाबेस विकल्प स्नैपशॉट अलगाव अलगाव डेटाबेस में सक्षम होने पर डिफ़ॉल्ट READ COMMITTED अलगाव स्तर के व्यवहार को निर्धारित करता है । यदि आप स्पष्ट रूप से READ_COMMITTED_SNAPSHOT को निर्दिष्ट नहीं करते हैं, तो READ COMMITTED को सभी निहित लेनदेन पर लागू किया जाता है। यह READ_COMMITTED_SNAPSHOT OFF (डिफ़ॉल्ट) सेट करने के समान व्यवहार उत्पन्न करता है। जब READ_COMMITTED_SNAPSHOT ऑफ़ लागू होता है, तो डेटाबेस इंजन डिफ़ॉल्ट अलगाव स्तर को लागू करने के लिए साझा किए गए ताले का उपयोग करता है। यदि आप READ_COMMITTED_SNAPSHOT डेटाबेस विकल्प को ON पर सेट करते हैं, तो डेटाबेस इंजन डेटा की सुरक्षा के लिए ताले का उपयोग करने के बजाय पंक्ति संस्करण और स्नैपशॉट अलगाव को डिफ़ॉल्ट के रूप में उपयोग करता है।

तो हाँ।

आरसीएसआई को सक्षम करने से रीडर्स को लगातार डेटा प्राप्त करने की अनुमति मिलती है और लेखकों द्वारा अवरुद्ध नहीं किया जाता है जिसे रीड कमिटेड का उपयोग करना जारी रहेगा


4

मैं आपको निम्नलिखित प्रश्न और उसके उत्तर पढ़ने का सुझाव दूंगा: डेटाबेस लॉकिंग मुद्दे?

Db स्तर पर उपयोग करने के लिए सही आइसोलेशन स्तर खोजना सबसे तेज़ काम है जिसे आप अभी इस मुद्दे को ठीक करने में मदद करने के लिए कर सकते हैं, क्योंकि डेटाबेस को छूने वाले सभी एप्लिकेशन को बदलना और उनके कोड को बदलना अब मुश्किल है। चूँकि आपने कहा था "मुझे उस प्रक्रिया पर कोई नियंत्रण नहीं है जो चुनिंदा बयानों को बुला रहा है", सबसे तेज़ उत्तर यह होगा कि पढ़े हुए स्नैपशॉट अलगाव स्तर पर db स्विच करें, ताकि आप पढ़ने के प्रश्नों को स्पर्श न करें। अन्यथा आपको अपने बड़े लेनदेन के दौरान डेटा पढ़ने वाले सत्रों के लिए स्नैपशॉट अलगाव स्तर का उपयोग करने की आवश्यकता होगी।

सही चुनने के बारे में अधिक जानकारी यहाँ: पंक्ति संस्करण आधारित अलगाव स्तर चुनना

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