तुम ने पूछा था
अनकम्फेड डेटा कहाँ संग्रहीत किया जाता है, जैसे कि एक READ_UNCOMMITTED लेनदेन किसी अन्य ट्रांज़ेक्शन से अप्रयुक्त डेटा को पढ़ सकता है?
अपने प्रश्न का उत्तर देने के लिए, आपको यह जानना होगा कि इनोबीडी आर्किटेक्चर कैसा दिखता है।
निम्न चित्र परकोना सीटीओ वादिम त्कचेंको द्वारा वर्षों पहले बनाया गया था
माईक्यूक्यू डॉक्यूमेंटेशन के अनुसार इनोबीडी ट्रांजैक्शन मॉडल और लॉकिंग पर
एक COMMIT का अर्थ है कि वर्तमान लेनदेन में किए गए परिवर्तन स्थायी हो जाते हैं और अन्य सत्रों के लिए दृश्यमान हो जाते हैं। दूसरी ओर, एक बोलबाला कथन, वर्तमान लेनदेन द्वारा किए गए सभी संशोधनों को रद्द कर देता है। COMMIT और ROLLBACK, दोनों ही सभी InnoDB ताले जारी करते हैं जो वर्तमान लेनदेन के दौरान सेट किए गए थे।
चूंकि COMMIT और ROLLBACK डेटा दृश्यता को नियंत्रित करते हैं, READ COMMITTED और READ UNCOMMITTED को उन संरचनाओं और तंत्रों पर निर्भर रहना होगा जो परिवर्तन को रिकॉर्ड करते हैं
- रोलबैक सेगमेंट / अनडू स्पेस
- फिर से लॉग
- तालिका के विरुद्ध अंतराल लॉक किए गए
रोलबैक सेगमेंट और पूर्ववत् स्थान को पता होगा कि परिवर्तन लागू होने से पहले डेटा क्या बदला हुआ दिखता था। Redo Logs को पता होगा कि डेटा अपडेट होने के लिए किन बदलावों को आगे बढ़ाया जाना है।
आपने भी पूछा
बिना पढ़े डेटा को पढ़ने के लिए READ_COMMITTED लेन-देन के लिए यह संभव क्यों नहीं है, अर्थात "गंदा पढ़ना"? क्या तंत्र इस प्रतिबंध को लागू करता है?
Redo Logs, Undo Space और Locked रो प्ले में आते हैं। आपको यह भी सोचना चाहिए कि वह InnoDB बफ़र पूल (जहाँ आप गंदे पृष्ठों को innodb_max_dirty_pages_pct , innodb_buffer_pool_pages_dirty और innodb_buffer_pool_bytes_dirty से माप सकते हैं )।
इसके प्रकाश में, READ COMMITTED को पता होगा कि डेटा स्थायी रूप से कैसा दिखता है। इसलिए, गंदे पन्नों की तलाश करने की आवश्यकता नहीं है जो प्रतिबद्ध नहीं थे। पढ़ें कमोड और ज्यादा कुछ नहीं होगा कि एक गंदा पढ़ा गया है जो प्रतिबद्ध है। READ UNCOMMITTED ने यह जानना जारी रखा होगा कि किन पंक्तियों को लॉक किया जाना है और डेटा को दृश्यमान बनाने के लिए कौन से रीडो लॉग को पढ़ा या अनदेखा किया गया है।
अलगाव को प्रबंधित करने के लिए पंक्तियों की लॉकिंग को पूरी तरह से समझने के लिए, कृपया InnoDB लेनदेन मॉडल और लॉकिंग पढ़ें