एसक्यूएल सर्वर की रीड एसएनएपीएसएचओटी बनाम स्नैपशॉट


23

मैं SQL सर्वर READ COMMITTED SNAPSHOTऔर SNAPSHOTअलगाव स्तरों के बीच के अंतरों पर शोध कर रहा था और निम्नलिखित संसाधन में आया था:

पंक्ति संस्करण आधारित अलगाव स्तर चुनना

अधिकांश अनुप्रयोगों के लिए, निम्न कारणों से स्नैपशॉट अलगाव पर पंक्ति वर्जनिंग का उपयोग करके प्रतिबद्ध अलगाव की सिफारिश की जाती है:

  • यह स्नैपशॉट अलगाव की तुलना में कम tempdb स्थान की खपत करता है।

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

मैं इन विषयों के लिए कुछ नया हूँ, लेकिन मैं ऊपर दिए गए लिंक से दो बुलेट पॉइंट को समझ नहीं पा रहा हूँ।

  1. इन मोड्स के लिए टेम्पर्ड स्पेस अलग क्यों होगा? क्या एक दूसरे की तुलना में अधिक दानेदार संस्करण की दुकान करता है?

  2. स्नैपशॉट अलगाव संघर्ष को अपडेट करने के लिए अधिक असुरक्षित क्यों है?

जवाबों:


18
  1. READ COMMITTED SNAPSHOTप्रत्येक कथन के बाद एक नया स्नैपशॉट का उपयोग करता है। इसका मतलब है कि कम पंक्ति संस्करणों को जीवित रखा जा रहा है। (डॉक्स से आपके द्वारा उद्धृत किया गया बयान थोड़ा भ्रामक है क्योंकि यह सुझाव देता है कि यह हमेशा सच होता है - यह लंबे समय तक चलने वाले SNAPSHOTलेनदेन के मामले में केवल सच है ।) स्नैपशॉट पंक्ति संस्करण लेखन पर बनाए जाते हैं। टेंपडेब में क्या डाला जाता है, यह पढाई प्रभावित नहीं करती है। राइटर्स संभवतः यह नहीं जान सकते कि भविष्य में क्या पढ़ा जाएगा। पाठक केवल उसी चीज को प्रभावित करते हैं जिसे शुद्ध किया जा सकता है।
  2. जब कोई SNAPSHOTलेन-देन T1उस पंक्ति को लिखता है जिसे शुरू करने और लिखने का प्रयास करने के T2बीच के समय में किसी अन्य लेन-देन द्वारा संशोधित किया गया था , तो स्टेटमेंट अपडेट संघर्ष त्रुटि के साथ विफल हो जाता है। यह एक आशावादी संगामिति मॉडल है। के साथ पंक्ति पर एक्स-लॉक जारी करने के लिए प्रतीक्षा करें और सामान्य रूप से जारी रहेगा।T1T1READ COMMITTED SNAPSHOT T1T2

1
# 2 के लिए, क्या यह कहना सुरक्षित है कि SNAPSHOT विशेष रूप से अपडेट के लिए लॉक नहीं है - यह केवल पंक्ति संस्करण पर निर्भर करता है?
जॉन रसेल

1
@ जॉनरसेल यह रोलबैक का समर्थन करने के लिए विशेष रूप से लॉक करता है। सभी लिखते हैं कि यह सुनिश्चित करने के लिए एक्स-लॉक होना चाहिए कि रोलबैक के मामले में पंक्ति को बहाल किया जा सकता है।
usr

0

स्नैपशॉट और पढ़े गए स्नैपशॉट के बीच एक और अंतर निम्नलिखित है।

  1. स्नैपशॉट

पहले सत्र में

सेट TRAN ISOLATION लेवल SNAPSHOT BEGIN TRAN SELECT * FROM TB1 ..... .....

दूसरे सत्र में

अपडेट करें टीबी 1 सेट का नाम = नाम + 'परीक्षण' कहां आईडी = 1

पहले सत्र में

चुनें * टीबी 1 से - यह आईडी = 1 के लिए मान नाम लौटाएगा, नाम नहीं + 'परीक्षण' COMMIT TRAN

पढ़ने के लिए प्रतिबद्ध स्नैपशॉट सत्र 1 में पहला चयन आईडी = 1 के लिए नाम लौटाएगा, और दूसरा चयन नाम + 'परीक्षण' लौटाएगा।

तो स्नैपशॉट अलगाव में SQL सर्वर लेनदेन की शुरुआत में एक स्नैपशॉट करते हैं, और पूरे लेनदेन के दौरान उस स्नैपशॉट से पढ़ते हैं।

पढ़े गए स्नैपशॉट में लेन-देन के दौरान स्नैपशॉट को प्रत्येक SELECT स्टेटमेंट के लिए लिया जाता है।

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