MySQL लेनदेन का आकार - कितना बड़ा है?


23

मेरे पास एक आयात प्रक्रिया है जो हर बार चलती है और मैं चाहता हूं कि यह एक 'ऑल या कुछ नहीं' सौदा हो, उर्फ: एक लेनदेन।

कई पहलू हैं, और आयात 100k-1mil + रिकॉर्ड के बीच कहीं भी उपज सकते हैं। यह कई एमबी से लेकर कुछ सौ एमबी डेटा तक के पेलोड के बराबर है।

मुझे पता है कि अस्थायी टेबल एक और विकल्प है - लेकिन यह तरीका इतना आसान है।

क्या कमिट्स के बीच बड़ी मात्रा में डेटा हेरफेर के साथ इस तरह के अभ्यास के बारे में जागरूक होने के लिए कोई चेतावनी है? (एक बार किए गए सामान्य लेखन / अनुक्रमण लोड के बाहर)


निजी तौर पर, मुझे संतुलन रखना पसंद है। मैं 1k या 10k लेन-देन में आयात करता हूं, 'क्योंकि मुझे सिर्फ इतना पता है कि यह लगभग 900k पंक्तियों तक पहुंच जाएगा और फिर बफर आकार या कुछ और हास्यास्पद होने के कारण दुर्घटनाग्रस्त हो जाएगा। उस से लेने के लिए बहुत आसान है, और नहीं के रूप में ज्यादा मैं / हे।
कप्तान हाइपरटेक्स्ट

जवाबों:


20

एक अड़चन के बारे में पता करने के लिए InnoDB लॉग बफर है। आकार innodb_log_buffer_size द्वारा सेट किया गया है । यहाँ MySQL प्रलेखन इसके बारे में क्या कहता है:

बफर के बाइट्स का आकार जो कि इनोबीडी डिस्क पर लॉग फ़ाइलों में लिखने के लिए उपयोग करता है। डिफ़ॉल्ट मान 8MB है। एक बड़ा लॉग बफ़र लेनदेन करने से पहले लॉग को डिस्क पर लिखने की आवश्यकता के बिना बड़े लेनदेन को चलाने में सक्षम बनाता है। इस प्रकार, यदि आपके पास बड़ा लेनदेन है, तो लॉग बफर को बड़ा बनाने से डिस्क I / O की बचत होती है।

InnoDB लॉग बफर को InnoDB बफर पूल के साथ भ्रमित नहीं होना चाहिए। उनके बीच प्रमुख अंतर उनका उद्देश्य है। InnoDB लॉग बफ़र मूल रूप से अल्पकालिक परिवर्तनों को रिकॉर्ड करेगा जो रेडो लॉग्स को लिखा जाता है (ib_logfile0, ib_logfile1)। InnoDB बफ़र पूल ( innodb_buffer_pool_size द्वारा आकार ) उन डेटा और इंडेक्स पेजों को कैश करता है, जिन्हें डिस्क में रखना है (यदि पेज गंदे हैं) और अंततः लिखे गए हैं। एक बार प्रतिबद्ध होने के बाद, परिवर्तन पृष्ठ LRU नियमों के माध्यम से हटाए जाने तक RAM में बने रहते हैं।

लॉग बफ़र के माध्यम से बड़े लेन-देन फ़नल होना चाहिए। जैसा कि उल्लेख किया गया है, एक बड़ा लॉग बफर डिस्क I / O को कम करेगा। केवल एक बड़ी प्रतिबद्धता एक अड़चन पेश करेगी।

आप कॉन्फ़िगर करने के लिए अन्य InnoDB विकल्पों में देखना चाहते हैं।

मेरे पास आगे के शोध के लिए InnoDB को अनुकूलित करने के बारे में अन्य पोस्ट हैं


किसी तरह मैं जानता था कि आप इस पर होंगे। आप हमेशा देने के लिए लगता है कि पूरी तरह से जवाब के लिए धन्यवाद। साइड सवाल: क्या आपके पास innodb_io_capacity के उपयोग के बारे में कोई संसाधन हैं? जब प्रलेखन में 5400 / 7200RPM उपभोक्ता SATA का मान 100 होता है, तो क्या आपकी रणनीति यह है कि आप उस मूल्य को इतना अधिक निर्धारित करके 'सीमा को हटाने' का सुझाव देते हैं?
पतला

मैं आमतौर पर innodb_io_capacity को उच्चतर सेट करता हूं और हार्डवेयर को इसे ऊपर देता हूं। मैं इसे अभी अपने उत्तर में जोड़ूंगा।
RolandoMySQLDBA
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.