मुख्य सामग्री पर जाएं
मॉड्यूल 11 · पाठ 4 का 4पाठ्यक्रम में 44/57~12 min
मॉड्यूल पाठ (4/4)

अलगाव का स्तर

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

  • READ UNCOMMITTED: अराजक पागलपन, आपके लेन-देन में दूसरों द्वारा किए गए हर बदलाव को देखा जाएगा जिसमें लोगों की अपनी स्क्रिप्ट के बीच में अस्थायी डेटा भी शामिल है। लगातार डर्टी रीड त्रुटियों के कारण कोई भी बड़े डीबी पर इसका उपयोग नहीं करता है।
  • READ COMMITTED: (पोस्टग्रेज़ के लिए डिफ़ॉल्ट)। जैसे ही कोई तीसरा पक्ष कोई प्रतिबद्धता जारी करता है, आपको तुरंत नया डेटा दिखाई देगा, लेकिन आप फैंटम रीड्स (अपने लंबे वर्कफ़्लो के बीच में नए रिकॉर्ड देखना) या एक गैर-रेखीय सुसंगत दृश्य का शिकार हो सकते हैं।
  • REPEATABLE READ: भारी। आपके बड़े टाइम-विंडो सत्र की अवधि के लिए, मैंने देखा कि मेरी क्वेरी शुरू होने के क्षण में डेटाबेस जमे हुए था, अन्य लोगों द्वारा पूरी की गई आधिकारिक प्रतिबद्धताओं को भी पूरी तरह से अनदेखा और अवहेलना कर रहा था! यह जादुई रूप से दिखने वाले रिकॉर्ड्स से बचाता है और स्थिरता की गारंटी देता है।
  • SERIALIZABLE: गॉड टियर (सुपर स्लो)। प्रत्येक ओवरलैपिंग लेनदेन को अवरुद्ध करके और उन्हें एक ही लेन में क्रमिक रूप से निष्पादित करके, जो टकराते हैं उन्हें बेरहमी से निरस्त कर देता है, थोड़ी सी भी टक्कर की वैज्ञानिक संभावना को जड़ से खत्म कर देता है, उच्च थ्रूपुट के ठोस 90% का त्याग करता है।

आप इसे कैसे सेट करते हैं?

सामान्य BEGIN; के बजाय आप टाइप करें:

SQL
BEGIN ISOLATION LEVEL SERIALIZABLE;

-- and you proceed normally with your hermetically sealed isolation
UPDATE products SET stock = 10;
COMMIT;

या कुछ वेरिएंट और पुराने इंजनों में आप इसे शुरू करने के बाद असाइन करते हैं:

SQL
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

खुद कोशिश करना

व्यायाम#sql.m11.l4.e1
प्रयास: 0लोड हो रहा है...

जमे हुए, संरक्षित एक्सचेंज बनाने के लिए क्वेरी के जीवनकाल के लिए वैश्विक स्तर को दोहराने योग्य पढ़ने के लिए औपचारिक रूप से सेट करके लेनदेन शुरू करें।\nयाद रखें कि क्वेरी स्तर पर इसका कोई उद्देश्य नहीं है जब तक कि इसके बाद कुछ और न हो, इसलिए इसे 'COMMIT' के साथ खाली बंद करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

आरंभिक अलगाव स्तर दोहराए जाने योग्य पढ़ने के साथ खोलें; और COMMIT के साथ बंद करें;

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#sql.m11.l4.e2
प्रयास: 0लोड हो रहा है...

आइए पागल क्रमांकन स्तर का प्रयास करें और कुछ काल्पनिक डेटा डालें।\nएक 'SERIALIZABLE' ब्लॉक खोलें।\nश्रेणी Id=2 का नाम 'Nuovo Nome Segreto' में अपडेट करें।\nअंतिम परमाणु चलाएँ, प्रतिबद्धता को व्यवस्थित करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

अलगाव स्तर को क्रमबद्ध करना शुरू करें;\nश्रेणियां अद्यतन करें सेट नाम = 'नुओवो नोम सेग्रेटो' जहां आईडी = 2;\nकमिट करें;

3 प्रयासों के बाद समाधान उपलब्ध है