अद्वितीय कुंजी के साथ MyISAM पर विभाजन के साथ MySQL आवेषण को गति दें


9

मेरे पास एक बड़ी MyISAM टेबल (~ 30M पंक्तियाँ) हैं। कुछ बिंदु पर मैंने इसे निश्चित पंक्ति स्वरूप में बदल दिया है, इसलिए अब तालिका डिस्क पर 40Gb और अनुक्रमित के लिए 2Gb लेती है। तालिका में एक अद्वितीय सूचकांक है और प्रति सेकंड 100 कुंजी डुप्लिकेट कुंजी अद्यतन पर सम्मिलित हैं। जैसे-जैसे तालिका बढ़ती है ये आवेषण धीमे और धीमे होते जा रहे हैं।

मुझे यकीन नहीं है, लेकिन विभाजन डालने में तेज़ी लाने में मेरी मदद करेगा?

जवाबों:


1

सबसे पहले, समवर्ती लेखन निश्चित रूप से MyISAM भंडारण के लिए एक विकल्प नहीं है। उनमें से प्रत्येक पूरी तालिका को बंद कर देगा (कुछ मामलों में पढ़ने के लिए छोड़कर)। यदि InnoDB आपको अच्छी तरह से सूट नहीं करता है, तो TokuDB का प्रयास करें। लेकिन यह TokuDB (और पाठ्यक्रम के InnoDB) इंजन के लेन-देन की प्रकृति के कारण MyISAM की तुलना में धीमी होगी (आपको कम से कम दो बार एक ही डेटा लिखना चाहिए: जर्नल और डेटा फ़ाइलें)। इसके अलावा, यदि आपका सर्वर किसी दिन दुर्घटनाग्रस्त हो जाएगा, तो आप अपने 40Gb MyISAM टेबल की मरम्मत तक घंटों इंतजार करेंगे।

यदि आप अभी भी अपने MyISAM-tables में डेटा लोड करना चाहते हैं और इसे तेज़ी से करना चाहते हैं, तो मैं LOAD DATA INFILEआवेषण के बजाय उपयोग करने की सिफारिश कर सकता हूं । यह बड़ी मात्रा में डेटा को टेबल पर लोड करने का सबसे तेज़ तरीका है। और हां, इंडेक्स घातीय तरीके से सम्मिलित प्रदर्शन को धीमा कर देगा।

विभाजनों के बारे में एक शब्द: MySQL में INSERT- कथन प्रूनिंग का समर्थन नहीं करते हैं, इसलिए अद्वितीय अनुक्रमणिका मिलान के लिए प्रत्येक कथन पर आपके सभी विभाजन स्कैन किए जाएंगे। इसके अलावा, सभी विभाजन तब तक लॉक रहेंगे जब तक कि इंसर्ट खत्म नहीं हो जाता।


एक और दिलचस्प इंजन: code.facebook.com/posts/190251048047090/...
GreyWolf

0

क्या ये सम्मिलित प्रश्न समवर्ती या एक ही प्रक्रिया से उत्पन्न हुए हैं? यदि वे समवर्ती हैं, तो इस तालिका के लिए InnoDB भंडारण का उपयोग करना बेहतर है क्योंकि MyISAM संपूर्ण तालिका को लॉक करता है और InnoDB पंक्ति ताले का उपयोग करता है। यदि किसी अन्य संग्रहण पर स्विच करना एक विकल्प नहीं है, तो आप INSERT DELAYED कथन और कई अन्य सम्मिलित अनुकूलन का प्रयास कर सकते हैं । जब तक आप अलग-अलग भौतिक डिस्क पर अलग-अलग विभाजन नहीं करते तब तक विभाजन में मदद नहीं मिलेगी।


ये आवेषण समवर्ती हैं। लेकिन InnoDB 'डुप्लीकेट की अपडेट पर इंसर्ट' पर बहुत धीमा है, इसलिए यह कोई विकल्प नहीं है। जहां तक ​​मैं बता सकता हूं कि आईओ एक अड़चन नहीं है - रैम की मात्रा >> टेबल्स का आकार, जिसमें इंडेक्स और राइटटेकिंग शामिल है। मुझे लगता है कि समस्या आंतरिक mysql के ताले या कुछ और में निहित है।
d0rc

INSERT DELAYED का उपयोग केवल INSERT बयानों के लिए किया जाना चाहिए जो मूल्य सूचियाँ निर्दिष्ट करते हैं। सर्वर INSERT के लिए DELAYED को अनदेखा करता है ... चयन करें या INSERT ... DUPLICATE प्रमुख अद्यतन कथनों पर।
llazzaro

"InnoDB बहुत धीमा है" - क्या आपने इसे थोड़ा सा ट्यूनिंग करने की कोशिश की है? डिफ़ॉल्ट सेटिंग्स काफी खराब हैं।
RVs
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.