सबसे पहले, मुझे लगता है कि यह पृष्ठभूमि के रूप में उपयोगी होगा multi-version concurrency control (MVCC) इस उत्तर की पृष्ठभूमि के रूप में।
InnoDB MVCC को लागू करता है, जिसका अर्थ है कि यह नियमित SELECT
के लिए नॉन-लॉकिंग रीड्स का उपयोग कर सकता है . इसके लिए "स्नैपशॉट" बनाने की आवश्यकता नहीं है और वास्तव में InnoDB में किसी ऑब्जेक्ट के रूप में स्नैपशॉट की कोई वास्तविक अवधारणा नहीं है। इसके बजाय, डेटाबेस में प्रत्येक रिकॉर्ड अपने स्वयं के संस्करण संख्या का ट्रैक रखता है और एक "रोल पॉइंटर" को "पूर्ववत करें लॉग" रिकॉर्ड (जो अभी भी मौजूद हो सकता है या नहीं) को बनाए रखता है जो पंक्ति को उसके पिछले संस्करण में संशोधित करता है। यदि किसी रिकॉर्ड के पुराने संस्करण की आवश्यकता है, तो वर्तमान संस्करण पढ़ा जाता है और उन रोल पॉइंटर्स का पालन किया जाता है और रिकॉर्ड के पर्याप्त पुराने संस्करण के तैयार होने तक रिकॉर्ड को पूर्ववत किया जाता है।
आम तौर पर सिस्टम उन पूर्ववत लॉग को लगातार साफ कर रहा है और उनके द्वारा उपभोग की जाने वाली जगह का पुन:उपयोग कर रहा है।
किसी भी समय लंबे समय से चल रहे लेनदेन (ध्यान दें, जरूरी नहीं कि एक ही प्रश्न हो) मौजूद है, उस लेन-देन को संतुष्ट करने के लिए सभी रिकॉर्ड के पुराने पर्याप्त संस्करणों को पर्याप्त रूप से फिर से बनाने के लिए पूर्ववत लॉग को रखा जाना चाहिए (शुद्ध नहीं)। एक बहुत व्यस्त प्रणाली में, वे पूर्ववत लॉग बहुत तेज़ी से गीगाबाइट स्थान का उपभोग करने के लिए जमा हो सकते हैं। इसके अतिरिक्त यदि विशिष्ट व्यक्तिगत रिकॉर्ड को बार-बार संशोधित किया जाता है, तो क्वेरी को संतुष्ट करने के लिए उस रिकॉर्ड को पुराने पर्याप्त संस्करण में वापस लाने में बहुत से पूर्ववत लॉग एप्लिकेशन (हजारों) लग सकते हैं।
यही कारण है कि "लंबे समय से चल रहे प्रश्नों" को महंगा और परेशान किया जाता है। वे सिस्टम टेबलस्पेस में पूर्ववत लॉग रखने के लिए डिस्क स्थान की खपत में वृद्धि करेंगे, और वे पढ़ने पर पंक्ति संस्करणों को वापस लाने के लिए लॉग रिकॉर्ड एप्लिकेशन को पूर्ववत करने के कारण खराब प्रदर्शन करेंगे।
कुछ डेटाबेस पूर्ववत लॉग स्थान की अधिकतम मात्रा को लागू करते हैं जिसका उपभोग किया जा सकता है, और एक बार जब वे उस सीमा तक पहुंच जाते हैं तो वे पुराने पूर्ववत लॉग रिकॉर्ड को फेंकना शुरू कर देते हैं और चल रहे लेनदेन को अमान्य कर देते हैं। यह उपयोगकर्ता को "स्नैपशॉट बहुत पुराना" त्रुटि संदेश उत्पन्न करता है। InnoDB की ऐसी कोई सीमा नहीं है, और अनिश्चित काल के लिए संचय की अनुमति देता है।