यदि हम sql- सर्वर में पढ़े गए स्नैपशॉट को सक्षम करते हैं तो क्या जोखिम हैं?


70

मैंने यहां पढ़ा है कि प्रति पंक्ति कुछ अतिरिक्त डेटा संग्रहीत किया जाएगा ताकि हम एक प्रदर्शन में गिरावट देख सकें लेकिन अन्य जोखिम क्या हैं?

जैसे। क्या यह डेटाबेस की वसूली को प्रभावित करेगा? क्या इसका फायदा उठाने के लिए हमें कुछ और करना होगा?

मैं इन आदेशों को निष्पादित करने की योजना बनाता हूं:

ALTER DATABASE DatabaseName SET READ_COMMITTED_SNAPSHOT ON
ALTER DATABASE DatabaseName SET ALLOW_SNAPSHOT_ISOLATION ON

मेरा मानना ​​है कि यह हमें कुछ ओरल के करीब पहुंचाएगा जहां अगर एक लेन-देन अद्यतन कर रहा है तो अन्य लेनदेन अभी भी पुराने डेटा को पढ़ सकते हैं। क्या ये सही है?

मैं इसे देख रहा हूं क्योंकि मैं SQL Server 2005 में लॉकिंग समस्याओं से बीमार हूं। मैं उम्मीद कर रहा हूं कि यह हमारे उपयोगकर्ताओं द्वारा देखे जाने वाले सामयिक गतिरोधों को कम कर सकता है, हमारे आवेदन के समग्र प्रदर्शन में मदद कर सकता है और हमारे डेवलपर्स को बिना लेनदेन के एक से अधिक ऑपरेशन करने के लिए प्रोत्साहित कर सकता है। डर।

जवाबों:


48

सारांश

  1. अगर आपको लॉकिंग की समस्या है तो आपको अपने कोड की समस्या है: यह डेटाबेस इंजन नहीं है
  2. यह एक जादू की गोली नहीं है
  3. आप अधिक समस्याएं जोड़ सकते हैं

भार

यह आपके टेम्पर्ड और सीपीयू पर लोड भी बढ़ाएगा । और देखें:

सुरक्षा

सबसे महत्वपूर्ण, स्नैपशॉट अलगाव कई मामलों में डिफ़ॉल्ट रूप से सुरक्षित नहीं हैं । राइट-स्क्यू विसंगतियों पर अधिक के लिए "स्नैपशॉट अलगाव" (विकिपीडिया) पढ़ें । अगला खंड "मेकिंग स्नैपशॉट अलगाव सीरियल" इस के आसपास पाने के लिए है।

सामान्य तौर पर, इसलिए स्नैपशॉट अलगाव उपयोगकर्ता पर गैर-तुच्छ बाधाओं को बनाए रखने की कुछ समस्या रखता है, जो संभावित नुकसान या संभावित समाधानों की सराहना नहीं कर सकते हैं। इस हस्तांतरण के लिए बेहतर प्रदर्शन बेहतर है।

और देखें:


35

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

मेरे अनुभव में, TEMPDB पर अतिरिक्त भार नगण्य है और अवरुद्ध पाठकों को कम करने में पंक्ति संस्करण का लाभ बहुत बड़ा है।

संदर्भ के लिए, पंक्ति संस्करण (स्नैपशॉट अलगाव) विधि ओरेकल दशकों के लिए इस्तेमाल किया गया है अवरुद्ध पाठकों और Oracle डीबीएस मैं लगभग 20 वर्षों के अनुभव के लिए पर काम किया है बिना अलगाव प्राप्त करने के लिए अब तक कम मुद्दों को अवरुद्ध से एसक्यूएल सर्वर करता है। अधिकांश SQL डेवलपर्स स्नैपशॉट अलगाव का उपयोग करने में संकोच कर रहे हैं, क्योंकि उन्होंने केवल उन डेटाबेस के खिलाफ अपने कोड का परीक्षण किया है जो डिफ़ॉल्ट सेटिंग का उपयोग करते हैं।


26

अन्य उत्तरों में जोड़ने के लिए अतिरिक्त बिंदुओं के जोड़े:

SET ALLOW_SNAPSHOT_ISOLATION ONकेवल एक डेटाबेस में स्नैपशॉट अलगाव को सक्षम करता है। इसका लाभ उठाने के SET TRANSACTION ISOLATION LEVEL SNAPSHOTलिए आपको फिर से आवेदन करना होगा और लेन-देन के लिए आप इसे लागू करना चाहते हैं। अपडेट कोड को अपडेट संघर्ष त्रुटियों को संभालने के लिए बदलना होगा।

के बाद SET READ_COMMITTED_SNAPSHOT ON, पढ़ने में बयान पंक्ति-संस्करण का उपयोग करते हैं। ध्यान दें, यह केवल पढ़ने के लिए स्टेटमेंट स्तर पंक्ति-संस्करण है । अपडेट के लिए, "वास्तविक" पंक्ति को पुनः प्राप्त किया गया है और अपडेट किए गए ताले को अपडेट किया गया है। पंक्ति-संस्करण आधारित अलगाव स्तरों को समझने में व्यवहार अनुभाग का सारांश देखें

या तो मार्ग, बिना संपूर्ण परीक्षण के आप सिस्टम में समस्याओं का एक नया सेट पेश करने की संभावना रखते हैं।


19

मेरा मानना ​​है कि यह हमें कुछ ओरल के करीब पहुंचाएगा जहां अगर एक लेन-देन अद्यतन कर रहा है तो अन्य लेनदेन अभी भी पुराने डेटा को पढ़ सकते हैं। क्या ये सही है?

हाँ, यह सही है

अच्छी तरह से gbn के जवाब में लिंक को पढ़ने के लायक है और मेरा मानना ​​है कि Oracle के डिफ़ॉल्ट MVCC के लिए स्नैपशॉट अलगाव मोड में SQL सर्वर के रूप में लागू होता है। मुझे लगता है कि अगर आप संभावित नुकसान को समझते हैं, तो IMO लाभ को दूर की कठिनाइयों (एक Oracle परिप्रेक्ष्य से बोलना) से आगे निकल जाता है - और निश्चित रूप से कुछ लॉकिंग समस्याएँ वैध रूप से दूर हो जाती हैं, यही MVCC का बिंदु है (एक वर्ग भी है) लॉकिंग समस्याएं जो कोड मुद्दों के कारण दूर नहीं होंगी, लेकिन मैं आपको यह समझ रहा हूं)।


9

हम अपने सभी प्रोजेक्ट्स में SNAPSHOT ISOLATION का उपयोग कर रहे हैं जो SQL Server DB का उपयोग करते हैं। कोई और 1205 SQL त्रुटियां, जो गलत एप्लिकेशन कोड के कारण नहीं हैं, लेकिन डिफ़ॉल्ट पृष्ठ लॉकिंग और पंक्ति लॉकिंग व्यवहार से हैं।

प्रदर्शन प्रभाव न्यूनतम है और अब तक 7 साल बीत चुके हैं, सैकड़ों लाखों ऑपरेशनों को विभिन्न प्रणालियों में संसाधित किया गया है, जिसमें स्नैपशॉट अलगाव के बारे में कोई समस्या नहीं है।

स्थिति जहां कई अलग-अलग सूत्र समानांतर में एकल पंक्ति में व्यावसायिक महत्वपूर्ण जानकारी अपडेट कर रहे हैं, अत्यंत असाधारण हैं, और संभावना है कि स्नैपशॉट अलगाव किसी भी असंगति समस्या का कारण होगा शून्य के पास बहुत अधिक है।

यदि आपके पास एक ओएलटीपी सिस्टम है, तो डिज़ाइन अपडेट द्वारा कई थ्रेड्स में वर्तमान पंक्ति डेटा के आधार पर एकल पंक्ति, निश्चित रूप से स्नैपशॉट ऐसे मामलों में स्वीकार्य नहीं हैं।


-2

हमारे पास यह सक्रिय था और एक अजीब चुनिंदा एसक्यूएल स्टेटमेंट चल रहा था जिसने 4 डीबी को कभी भी और कितने कोर और सभी को अवरुद्ध किया था। RCSI को सेट करना तय है। मैं इसे एक बार अन्य गतिरोधों का सामना करूंगा, डिफ़ॉल्ट रूप से नहीं।

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