क्या MySQL प्रभावी रूप से 64 GB RAM का लाभ उठा सकता है?


22

हम एक ऐसी समस्या में चल रहे हैं, जिसमें लगभग 50 मिलियन पंक्तियों वाली तालिका को क्वेरी करते हैं, और डेटाबेस सर्वर स्वैप मेमोरी में 4 जीबी (तालिका आकार लगभग 6 जीबी) के परिणाम का आकार होता है, और नाटकीय रूप से धीमा हो जाता है। मुझे पूरा यकीन है कि यह अस्थायी तालिका आकार को पार करने के साथ है, और इसे डिस्क पर स्वैप किया जा रहा है।

अगर मैंने अपने डेटाबेस सर्वर को 32 जीबी रैम से 64 जीबी रैम में अपग्रेड किया है, तो मुझे आश्चर्य है कि क्या MySQL डेटाबेस इस अतिरिक्त मेमोरी का पूरी तरह से लाभ उठा पाएगा और स्वैप नहीं कर पाएगा। मैं कुछ चर (जैसे KEY_BUFFER_SIZE, आदि ...) के माध्यम से चला गया हूं, और वे 64 जीबी से अधिक के मानों का समर्थन करते प्रतीत होते हैं। हालाँकि, MySQL प्रलेखन का कहना है कि tmp_table_size अधिकतम 4 जीबी है।

तो क्या मेमोरी अपग्रेड इसके लायक होगा? क्या "क्वेरी-लार्ज-टेबल" समस्या से लाभ होगा, या 4 जीबी सीमा के कारण यह मदद नहीं करेगा? मुझे पता है कि संभावित रूप से अन्य समाधान भी हैं जैसे कि टेबल को अलग-अलग तरीकों से विभाजित करना, आदि ... लेकिन टेबल के बारे में कुछ भी बदले बिना, अतिरिक्त मेमोरी मदद करेगा?

इसके अलावा, सामान्य तौर पर, क्या कोई अन्य मेमोरी से संबंधित चर हैं जो 32 से 64 जीबी रैम से चलते समय MySQL का लाभ नहीं उठा पाएंगे?

हम अपने डेटाबेस सर्वर के रूप में 64 बिट लाइनक्स (उबंटू) का उपयोग कर रहे हैं।

धन्यवाद, गैलेन

जवाबों:


5

यदि आप InnoDB का उपयोग कर रहे हैं, तो सेट करने के लिए सबसे महत्वपूर्ण चर है innodb_buffer_pool_size। मैं इसे आपके सिस्टम मेमोरी के लगभग 80% पर सेट कर दूंगा। एक बार जब आप कुछ उपयोग के बाद गर्म हो जाते हैं, तो आपका सबसे सक्रिय डेटा (कार्य डेटा सेट) मेमोरी में होगा (innodb_buffer_pool_size) और इस पर आपके ऑपरेशन बहुत तेज़ होने चाहिए। 64 जीबी मेमोरी के साथ, आप निश्चित रूप से वहां बहुत कुछ फिट कर सकते हैं। मेमोरी हमेशा डीबी सर्वर के लिए एक अच्छी खरीद है।


11

हां - यदि आप InnoDB का उपयोग करते हैं और आपके पास रीड-सेंसिटिव वर्कलोड है, तो आप बड़ी मात्रा में RAM का लाभ उठा सकते हैं [यह मानते हुए कि आपका डेटा सेट मेम में फिट होगा - आपका सर्वर धधकते-धधकते तेज होगा]।

मैं मेमोरी में सेट फिटिंग के साथ 8-16 जीबी सर्वर पर InnoDB स्टोरेज के साथ MySQL का उपयोग कर रहा हूं।


यहाँ भी - हम 64GB बॉक्स पर InnoDB चलाते हैं और यह बहुत अच्छा है।
जेम्स

9

शायद यह शोध में कुछ अतिरिक्त समय और प्रयास लगाने के लायक होगा कि स्मृति पर पैसा खर्च करने से पहले सिस्टम को स्वैप करने का क्या कारण है?

32GB मेमोरी पूरी टेबल, इंडेक्स और अधिकतम temp_table को मेमोरी में लोड करने के बाद भी काफी मात्रा में उपलब्ध मेमोरी को छोड़ देती है। एक त्वरित खोज प्रलेखन के इन दो टुकड़ों को लाया जो प्रासंगिक हो सकता है:


0

यदि आपको लगता है कि यह एक बहुत बड़ी अस्थायी तालिका बनने के कारण है, तो आप उन तरीकों पर विचार करना चाह सकते हैं जिनसे आप अस्थायी तालिकाओं से बचने के लिए क्वेरी में सुधार कर सकते हैं।

आप Stackoverflow पर पोस्ट कर सकते हैं जिसमें स्कीमा, क्वेरी, व्याख्या योजना और समस्या के लिए कुछ विवरण शामिल हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.