MySQL के लिए कौन से कॉन्फ़िगरेशन विकल्प सबसे बड़ी गति सुधार प्रदान करते हैं?


29

MySQL के लिए कौन से कॉन्फ़िगरेशन विकल्प सबसे बड़ी गति सुधार प्रदान करते हैं?

मैं वास्तविक कॉन्फ़िगरेशन फ़ाइल सुधार, तालिका प्रकार, हार्डवेयर सेटअप, प्रतिकृति, आदि के बारे में सोच रहा हूं। क्वेरी संरचना और तालिका संरचना के अलावा कुछ भी (ये वेबसाइट और स्टैक ओवरफ्लो पर ढूंढना आसान है)। क्या क्वेरी कैश सेटिंग्स जैसी चीजें हैं जो आपको सबसे अधिक गति प्रदान करती हैं? ड्राइव के बारे में कैसे; क्या यह बाहरी RAID या आंतरिक पर बेहतर है? क्या प्रतिकृति ने आपको बेहतर प्रदर्शन दिया, विशेष रूप से बड़े प्रश्नों को पढ़ने के साथ?

MySQL के प्रदर्शन को बेहतर बनाने के लिए आपने और कौन सी सेटिंग्स / बदलाव किए हैं?

नोट: मुझे लगता है कि ये बहुत उपयोग पर निर्भर हैं (यानी, छोटी वेबसाइट बनाम डेटा वेयरहाउस), लेकिन जैसा कि मुझे लगता है कि हम में से अधिकांश संभवत: विभिन्न साइटों / प्रणालियों पर काम करते हैं, यह विभिन्न तकनीकों को जानना अच्छा है जो विभिन्न पर लागू हो सकते हैं स्थितियों। इसके अलावा, मुझे लगता है कि कुछ तकनीकों को स्थितियों के बीच स्थानांतरित किया जा सकता है।


पूरी तरह से संबंधित नहीं है, लेकिन आपको मास्टर के लिए InnoDB का उपयोग करना चाहिए। आप MyISAM दासों को दोहरा सकते हैं और उनकी अंतर्निहित पूर्ण-पाठ खोज का उपयोग कर सकते हैं, जो कि LIKE
Neil McGuigan

जवाबों:


20

यहाँ मेरी सिफारिशें हैं (आपकी मिल भिन्न हो सकती है)

  • हार्डवेयर RAID का उपयोग करें। यह अन्य पदों में सॉफ़्टवेयर RAID का उपयोग करने के लिए मेरी सिफारिशों के विपरीत है, हालांकि यह एक विशिष्ट स्थिति है जहां आप हार्डवेयर RAID कार्ड चाहते हैं। विशेष रूप से आप चाहते हैं कि बैटरी RAID कार्ड पर एनवीआरएएम का बैकअप ले, ताकि लॉग फाइल को डिस्क पर ले जाए।
  • केवल RAID 1 या RAID 10 वॉल्यूम का उपयोग करें। RAID 5 या 6 लिखने की लागत मिश्रित रीड / राइट वर्कलोड में सहन करने के लिए बहुत अधिक है।
  • डेटा, लॉग और tmp वॉल्यूम के लिए अलग LUN का उपयोग करें। ये सभी ओएस और स्वैप संस्करणों से अलग होने चाहिए।
  • InnoDB का उपयोग करें ।
  • Innodb_file_per_table का उपयोग करें
  • 64-बिट OS का उपयोग करें
  • अपने InnoDB बफर पूल को अपनी उपलब्ध रैम के ~ 80% पर सेट करें
  • अपनी लॉग फाइल को अपने बफर पूल आकार के 1/4 भाग में सेट करें, आप 2 से 4 लॉग फ़ाइलों के बीच। बड़ी लॉग फाइलें धीमी शटडाउन और रिकवरी बार का मतलब है, लेकिन आप बड़े डेटाबेस डंप को तेजी से बहाल करने की अनुमति देते हैं।
  • log_slow_queries, लॉग-क्वेरीज़-नॉट-यूज़िंग-इंडेक्स, सेट-वैरिएबल = long_query_time = 1, उस लॉग में प्रत्येक क्वेरी की जांच करें, टेबल स्केन से बचने के लिए अपने स्कीमा को रिफलेक्टर करें और जब भी संभव हो टेबल को टैम्प करें।

11

एक बार फिर डेव चेनी ने वास्तव में यहां पार्क से बाहर दस्तक दी। मैं वास्तव में आपके प्रश्न के उत्तर में कुछ भी नहीं जोड़ सकता। हालाँकि, मैं आपको बताना चाहता हूँ कि आपने क्या नहीं पूछा। जेरेमी Zawodny और पीटर Zaitsev के रूप में मुझे साल पहले सिखाया गया था, अपने ROI समय के लिए नीचे ट्रैकिंग खर्च किया है और बुरा प्रश्नों का अनुकूलन समय विन्यास परिवर्तन 10 गुना बनाने में बिताए समय के लिए अपने ROI प्रदर्शन करने जा रहा है। निश्चित रूप से, आप एक खराब कॉन्फ़िगरेशन, गलत RAID सेटअप या अपर्याप्त रैम नहीं चाहते हैं। लेकिन, उत्कृष्ट और यहां तक ​​कि सीमांत, MySQL DBAs खराब क्वेरी (आमतौर पर डेवलपर्स / फ्रेमवर्क से, DBA नहीं) एक पुरानी स्थिति है, जहां बुरा कॉन्फ़िगरेशन एक सहन करने योग्य है ।

(मैं उन विशेषणों के लिए थोड़ी देर के लिए खोदा और अभी भी उन लोगों से प्रसन्न नहीं हूं जिन्हें मैंने चुना था।)

मैं फिर से जोर देना चाहता हूं कि अगर आपके डेवलपर्स रूबी और रूंगो जैसे रूबी जैसे फ्रेमवर्क में ओआरएम का उपयोग कर रहे हैं, तो आप वास्तव में उन प्रश्नों की निगरानी करते हैं जो आपके डीबी को मारते हैं। जब डेवलपर्स एसक्यूएल के बारे में सोचना बंद कर देते हैं और डीबी को अमूर्त होने देते हैं, तो वास्तव में इस रेंगना को बुरा लगता है। मुझे उन दो रूपरेखाओं से प्यार है जिन्हें मैंने अभी उल्लेख किया है। (उन्हें बुरा मानने के लिए मुझे वोट न दें।) यह सिर्फ क्वेरी स्लीथिंग को बहुत महत्वपूर्ण बनाता है। (पढ़ें: नौकरी की सुरक्षा)


4

कुछ अन्य चीजें (जो डेव चेनी के जवाब में नहीं बताई गई हैं)

  • डेटा के दोहरे बफ़र से बचने के लिए O_DIRECT में innodb_flush_method सेट करने का प्रयास करें। इससे बचें अगर आपके RAID कार्ड में बैटरी समर्थित कैश नहीं है या आपका डेटा सैन पर है।

  • इसके अलावा innodb_thread_concurrency के साथ खेलें। मेरा मानना ​​है कि डिफ़ॉल्ट 8 है, लेकिन यह देखने लायक है कि क्या यह प्रदर्शन में सुधार करता है

  • सुनिश्चित करें कि क्वेरी कैश चालू है और आँकड़े देखें कि हिट दर क्या है। अगर यह अच्छा है तो इसे बढ़ाकर देखें कि क्या यह हिट दर में सुधार करता है।

  • चलाए जा रहे अनुप्रयोगों के आधार पर आप डिफ़ॉल्ट अलगाव स्तर को बदलने में सक्षम हो सकते हैं। डिफ़ॉल्ट REPEATABLE_READ है लेकिन READ_COMMITTED आपको बेहतर प्रदर्शन दे सकता है

  • यदि आपके स्टेटमेंट ज्यादातर UPDATE और DELETE हैं, तो आप स्लेक्ट पर कैशे को प्राइमरी क्वैरी करके प्राइमरी क्वेरी की कोशिश कर सकते हैं जो रिजल्ट सेट को लौटाता है जिसे संशोधित करना है। की जाँच करें MK-गुलाम प्रीफ़ेच उपकरण जो आपको लिए यह कर देगा

  • MyISAM और InnoDB के अलावा अन्य भंडारण इंजनों पर एक नज़र डालें


3

हार्डवेयर के बारे में कुछ नहीं कह सकता, लेकिन आप http://blog.mysqltuner.com एक कोशिश दे सकते हैं । यह एक पर्ल स्क्रिप्ट है जो आपकी MySQL सेटिंग्स का विश्लेषण करती है।

आप http://www.thomas-krenn.com/de/wiki/MySQL_Performance_Tuning#mysqltuner.pl पर एक नमूना आउटपुट देख सकते हैं


1

पहली सामान्य बात जो आपको करनी चाहिए वह है मेमोरी पैरामीटर। MySQL के लिए डिफ़ॉल्ट सेटिंग्स बहुत रूढ़िवादी हैं। आप जो भी इंजन का उपयोग करते हैं, आपको संभवतः कई मेमोरी मापदंडों को दस या सौ गुना तक बढ़ाने की आवश्यकता होगी।

अगली चीज़ जो आपको करनी चाहिए, वह तालिका कैश पर दिखती है। डिफ़ॉल्ट मान 64 है, जो केवल उपयोगी है यदि आपके पास लगभग 60 से अधिक टेबल नहीं हैं। आप इसे लंबा रास्ता तय करना चाहेंगे।

तीसरी चीज़ जो आपको करनी चाहिए वह है थ्रेड और कनेक्शन पैरामीटर। अधिकांश वेब-आधारित अनुप्रयोगों के लिए डिफ़ॉल्ट प्रतीक्षा_ टाइमआउट बहुत लंबा है और इसे 30 सेकंड तक कम किया जा सकता है। यह स्मृति उपयोग में सुधार करेगा, साथ ही MySQL जल्द ही कनेक्शन काट देगा, जिससे 'नींद' की स्थिति में बहुत कम झूठ बोलना बंद हो जाएगा।

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