2008-12-12 11 views
40

MySQL के लिए सबसे अच्छा, उपयोगकर्ता-अनुकूल प्रदर्शन उपकरण कौन सा है? मैं अपने सेटअप की बोतल गर्दन को इंगित करने में मदद करना चाहता हूं। एसक्यूएल कथन में समस्या है, सेटिंग्स चर, या कुछ और?बेस्ट MySQL प्रदर्शन ट्यूनिंग टूल?

उत्तर

72

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

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

सुनिश्चित करें कि MySQL क्वेरी कैश सेट अप और काम कर रहा है और यदि आप कर सकते हैं तो इसे थोड़ा और रैम दें, और सुनिश्चित करें कि आपके महत्वपूर्ण प्रश्न कुछ भी नहीं कर रहे हैं जो mysql उन्हें कैशिंग को रोकता है। उदाहरण के लिए, प्रश्नों में अब() फ़ंक्शन का उपयोग करना - स्पष्ट कारणों से - अब हर सेकेंड में परिवर्तन करता है! इसके बजाय आप एसक्यूएल में टाइमस्टैम्प डाल सकते हैं, और समय को निकटतम मिनट/घंटा/दिन (सबसे बड़ी अवधि जिसे आप दूर कर सकते हैं) का उपयोग कर सकते हैं ताकि mysql को कुछ कैशिंग लाभ प्राप्त हो सके।

चीजों को अनुकूलित करने के लिए: चयन के सामने "एक्सप्लाइन" चिपकाना यह देखने का तरीका है कि एक क्वेरी कैसे निष्पादित की जा रही है और इसे कैसे सुधारें। आउटपुट की व्याख्या करना सीखें: http://dev.mysql.com/doc/refman/5.0/en/using-explain.html आप अक्सर चीजों को बेहतर बनाने के लिए मौजूदा इंडेक्स में नए इंडेक्स/कॉलम जोड़ सकते हैं। लेकिन आपको समय भी मिलेगा कि प्रश्नों को पुनर्गठित करने की आवश्यकता है।

MySQL के साथ प्रदर्शन में सुधार करना शुरू करना (मान लीजिए कि आपको पहले से ही पता नहीं है कि समस्या क्या है) धीमी क्वेरी लॉग की जांच करना है - यह फ़ाइल को लॉग इन करता है जो सभी प्रश्नों को x सेकंड से अधिक समय लेता है।

अवलोकन, अगर यह पहले से लॉग इन नहीं कर रहा है, तो कॉन्फ़िगरेशन सहित, यहां है: http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html - मैंने यह भी पाया है कि एक दिन या उससे भी अधिक समय तक long_query_time 0 सेट करना है, ताकि समय के साथ सभी प्रश्न लॉग इन हो जाएं, वास्तव में प्रदर्शन कहां जा रहा है इसका एक अनुमान प्राप्त करने का उपयोगी तरीका। लेकिन मैं तुरंत वहां नहीं जाऊंगा! और इसे मत छोड़ो, लॉग भारी हो सकते हैं।

एक बार आपके पास लॉगिंग के कुछ दिन बाद, मुझे यहां से mysqlsla (mysql धीमी लॉग विश्लेषक) मिला है: http://hackmysql.com/mysqlsla एक अच्छा टूल है।

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

MySQL sla यह सब आपके लिए करता है। यह लॉग के माध्यम से चलता है, और समूह क्वेरी कर सकते हैं जो कि समान हैं/जहां खंडों में अलग-अलग मान हैं। यह तब आपको कुल निष्पादन समय के संदर्भ में शीर्ष 10 प्रश्न प्रस्तुत करता है - जिसमें अक्सर कुछ आश्चर्य होता है, लेकिन आमतौर पर सबसे अधिक उत्पादक प्रारंभिक बिंदु होता है - सबसे महंगी क्वेरी लेते हैं और उस पर एक्स्पलाइन का उपयोग करते हैं और देखें कि क्या आप सुधार कर सकते हैं यह।

कुछ प्रश्नों में काफी समय लगता है, और आसानी से सुधार नहीं किया जा सकता है। इस मामले में, क्या आप डेटा को किसी अन्य तरीके से प्राप्त कर सकते हैं या कम से कम इसे कैश कर सकते हैं? आप यह भी पा सकते हैं कि डीबी स्कीमा को बदलना आवश्यक है। इसी तरह, कुछ प्रश्न mysqlsla आउटपुट के शीर्ष पर हो सकते हैं क्योंकि आप उन्हें बहुत अधिक चलाते हैं (विशेष रूप से सही अगर long_query_time 0 पर सेट है), भले ही वे बहुत तेज़ी से चलें। शायद आपके ऐप में कुछ कैशिंग जोड़ने का समय?

http://www.maatkit.org/ भी आशाजनक दिखता है - इसका कभी भी उपयोग नहीं किया जाता है, लेकिन एमके-क्वेरी-प्रोफाइलर टूल आगे बढ़ने के लिए उपयोगी क्यों होना चाहिए।

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

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

+2

वाह ... देखने के लिए इस लगभग एक साल बाद स्वीकार कर लिया गया :) समझाने के लिए – benlumley

+0

+1 खुश है, यहाँ मेरी परियोजना पर एक बहुत मदद! –

+1

जैसा कि मैं इसे समझता हूं, mysqlsla और maatkit percona टूलकिट में विलय हो गया। फिर भी, अच्छा mysql धीमी क्वेरी लॉग व्यूअर वेब आधारित https://github.com/benkaiser/mysql-slow-query-log-visualizer है – Bachor

6

EXPLAIN आपका मित्र है। इसके अलावा, आपको यह देखने के लिए कि क्या हो रहा है, विज्ञापन-उपकरण उपकरण, परीक्षण और ओएस टूल्स के मिश्रण पर भरोसा करना चाहिए।

ओएस टूल्स से बहुत सी चीजों को प्रभावी ढंग से देखा जा सकता है (यह निर्धारित करने के लिए अच्छा है कि स्थिति सीपीयू या आईओ बाध्य है या नहीं) या विभिन्न चर जो MySQL में ही देखे जा सकते हैं (वैश्विक चर दिखाएं, इंजन innodb स्थिति दिखाएं आदि)।

मुझे लगता है कि निष्पादन परीक्षण पर्यावरण होना वास्तव में महत्वपूर्ण है। अपने प्रयोगशाला (महंगे लेकिन आवश्यक) में उत्पादन-ग्रेड हार्डवेयर पर चलने वाले उत्पादन-जैसे लोड (लोड सिमुलेशन का उपयोग करके) के साथ उत्पादन-आकार का डेटाबेस प्राप्त करें।

कर लेने के बाद कि आप किसी भी पैरामीटर आप पूरी सुरक्षा में चाहते हैं ठीक कर सकते हैं, जानते हुए भी कि भले ही वह पूरी सर्वर पिघला देता है आपको वह सभी कुछ को प्रभावित किए बिना यह पुनर्निर्माण कर सकते हैं।

विशिष्ट चीजें न करें जो लोग सुझाव देते हैं जब तक कि आपने उन्हें अपने प्रदर्शन परीक्षण वातावरण में परीक्षण नहीं किया और उन्हें साबित रूप से लाभकारी पाया।

अनिवार्य रूप से, प्रदर्शन ट्यूनिंग आम तौर पर तीन क्षेत्रों में, लगता है इस क्रम में:

  • अपने डेटाबेस में ही (तालिका संरचना, अनुक्रमित आदि)
  • प्रश्नों
  • ट्यूनिंग की संरचना सर्वर मानकों

पहले दो को अक्सर अंतिम के पक्ष में अनदेखा किया जाता है, जो मदद कर सकता है लेकिन पहले दो किए जाने के बाद ही।

काम की राशि सर्वर करने की जरूरत को कम करने के महत्व को नजरअंदाज न करें - छोटे खेतों, कम पंक्तियां, कम कॉलम आदि का उपयोग कर, हमेशा बेहतर है।

4

मैं MONyog पाया जब मैं एक दुख mysql सर्वर था भारी सहायता कर सकते हैं।

इसका एक वेब आधारित प्रणाली है कि आपके सिस्टम 24/7 विश्लेषण करती है और आप प्रणाली चर, कैश आकार, आदि के बेहतर मूल्यों के लिए सभ्य सुझाव देती है ...

यह भी mysqlsla प्रकार धीमी क्वेरी विश्लेषक सुविधा में बनाया गया है।

बहुत बुरा यह मुफ़्त नहीं है। enter image description here

MONyog- MySQL मॉनिटर और सलाहकार नए UI जो मैं इसे प्यार करता है, मैं ज्यादातर इन सुविधाओं की तरह:

  1. ढूँढें समस्या एसक्यूएल - धीमी गति से लॉग, सामान्य लॉग, PROCESSLIST और का उपयोग कर प्रॉक्सी के माध्यम से
  2. चेतावनी की तरह महत्वपूर्ण शर्तों पर - सर्वर, नीचे है बहुत अधिक कनेक्शन आदि ..
  3. अपनी खुद की खुद क्वेरी परिणाम समय-समय पर
  4. मॉनिटर प्रतिकृति निगरानी

    आदि .... Complete feature list

संबंधित मुद्दे