Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL क्वेरी प्रदर्शन ट्यूनिंग

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

एक MySQL DBA ब्लॉग श्रृंखला बनें

  • पीटी-क्वेरी-डाइजेस्ट का उपयोग करके अपने SQL वर्कलोड का विश्लेषण करना
  • पीटी-क्वेरी-डाइजेस्ट का उपयोग करके डीप डाइव SQL वर्कलोड विश्लेषण

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

ऐसा हो सकता है कि कोई प्रश्न समय पर पूरा न हो सके। कुछ लॉकिंग मुद्दों के कारण क्वेरी अटक सकती है, यह इष्टतम नहीं हो सकती है या ठीक से अनुक्रमित नहीं हो सकती है या यह उचित समय में पूरा करने के लिए बहुत भारी हो सकती है। ध्यान रखें कि यदि आपके पास एक बड़ा उत्पादन डेटाबेस है, तो कुछ गैर-अनुक्रमित जोड़ आसानी से अरबों पंक्तियों को स्कैन कर सकते हैं। जो कुछ भी हुआ, क्वेरी शायद कुछ संसाधनों का उपयोग कर रही है - चाहे वह गैर-अनुकूलित क्वेरी के लिए CPU या I/O हो या यहां तक ​​​​कि केवल पंक्ति ताले भी हो। अन्य प्रश्नों के लिए भी उन संसाधनों की आवश्यकता होती है और यह चीजों को गंभीरता से धीमा कर सकता है। बहुत ही सरल लेकिन महत्वपूर्ण कार्यों में से एक होगा आपत्तिजनक प्रश्न का पता लगाना और उसे रोकना।

यह ClusterControl इंटरफ़ेस से बहुत आसानी से किया जाता है। क्वेरी मॉनिटर टैब पर जाएँ -> रनिंग क्वेरीज़ अनुभाग - आपको नीचे स्क्रीनशॉट के समान आउटपुट दिखाई देना चाहिए।

जैसा कि आप देख सकते हैं, हमारे पास अटके हुए प्रश्नों का ढेर है। आमतौर पर आपत्तिजनक क्वेरी वह होती है जिसमें लंबा समय लगता है, हो सकता है कि आप उसे मारना चाहें। यह सुनिश्चित करने के लिए कि आपने सही चुना है, आप इसकी और जाँच करना चाह सकते हैं। हमारे मामले में, हम स्पष्ट रूप से एक चयन ... अद्यतन के लिए देखते हैं जो कुछ तालिकाओं में शामिल हो जाता है और जो 'डेटा भेज रहा है' स्थिति में है, जिसका अर्थ है कि यह पिछले 90 सेकंड के लिए डेटा संसाधित कर रहा है।

एक अन्य प्रकार के प्रश्न जिसका उत्तर DBA को देने की आवश्यकता हो सकती है - कौन से प्रश्नों को निष्पादित करने में सबसे अधिक समय लगता है? यह एक सामान्य प्रश्न है, क्योंकि इस तरह के प्रश्न कम लटकने वाले फल हो सकते हैं - वे अनुकूलन योग्य हो सकते हैं, और एक संपूर्ण क्वेरी मिश्रण में किसी दिए गए क्वेरी के लिए जितना अधिक निष्पादन समय जिम्मेदार होता है, उसके अनुकूलन से लाभ उतना ही अधिक होता है। यह एक साधारण समीकरण है - यदि कोई क्वेरी कुल निष्पादन समय के 50% के लिए ज़िम्मेदार है, तो उसे 10x तेज़ बनाने से उस क्वेरी को अनुकूलित करने की तुलना में बेहतर परिणाम मिलेगा जो कुल निष्पादन समय के केवल 1% के लिए ज़िम्मेदार है।

ClusterControl ऐसे प्रश्नों के उत्तर देने में आपकी सहायता कर सकता है, लेकिन पहले हमें यह सुनिश्चित करने की आवश्यकता है कि क्वेरी मॉनिटर सक्षम है। आप क्वेरी मॉनिटर पृष्ठ के अंतर्गत क्वेरी मॉनिटर को चालू पर टॉगल कर सकते हैं। इसके अलावा आप अपने कार्यभार के अनुरूप सेटिंग्स के तहत "लंबी क्वेरी समय" और "लॉग क्वेरीज़ जो अनुक्रमणिका का उपयोग नहीं कर रहे हैं" विकल्प को कॉन्फ़िगर कर सकते हैं:

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

जब आपने पुष्टि की कि क्लस्टर कंट्रोल में क्वेरी मॉनिटर सक्षम है, तो आप क्वेरी मॉनिटर -> शीर्ष क्वेरी पर जा सकते हैं, जहां आपको नीचे की तरह एक स्क्रीन के साथ प्रस्तुत किया जाएगा:

आप यहां जो देख सकते हैं वह हमारे क्लस्टर को प्रभावित करने वाले सबसे महंगे प्रश्नों (निष्पादन समय के संदर्भ में) की एक सूची है। उनमें से प्रत्येक के पास कुछ और विवरण हैं - इसे कितनी बार निष्पादित किया गया था, कितनी पंक्तियों की जांच की गई थी या क्लाइंट को भेजी गई थी, निष्पादन का समय कितना भिन्न था, किसी दिए गए प्रकार की क्वेरी को निष्पादित करने में क्लस्टर ने कितना समय बिताया था। क्वेरी को क्वेरी प्रकार और स्कीमा द्वारा समूहीकृत किया जाता है।

आपको यह जानकर आश्चर्य हो सकता है कि जिस मुख्य स्थान पर निष्पादन समय व्यतीत होता है वह एक 'COMMIT' क्वेरी है। वास्तव में, यह गैलेरा क्लस्टर पर निष्पादित त्वरित OLTP प्रश्नों के लिए काफी विशिष्ट है। लेन-देन करना एक महंगी प्रक्रिया है क्योंकि प्रमाणीकरण होना है। यह COMMIT को क्वेरी मिक्स में सबसे अधिक समय लेने वाली क्वेरी में से एक बनाता है।

जब आप किसी क्वेरी पर क्लिक करते हैं, तो आप पूरी क्वेरी, अधिकतम निष्पादन समय, घटनाओं की संख्या, कुछ सामान्य अनुकूलन संकेत और इसके लिए एक EXPLAIN आउटपुट देख सकते हैं - यह पहचानने के लिए बहुत उपयोगी है कि इसमें कुछ गड़बड़ है या नहीं। हमारे उदाहरण में हमने बड़ी संख्या में पंक्तियों की जांच के साथ एक चयन ... अद्यतन के लिए जाँच की है। जैसा कि अपेक्षित था, यह क्वेरी भयानक एसक्यूएल का एक उदाहरण है - एक जॉइन जो किसी भी इंडेक्स का उपयोग नहीं करता है। आप EXPLAIN आउटपुट पर देख सकते हैं कि किसी भी इंडेक्स का उपयोग नहीं किया गया है, एक भी इंडेक्स का उपयोग करना संभव नहीं माना गया था। कोई आश्चर्य नहीं कि इस क्वेरी ने हमारे क्लस्टर के प्रदर्शन को गंभीर रूप से प्रभावित किया।

क्वेरी प्रदर्शन में कुछ अंतर्दृष्टि प्राप्त करने का दूसरा तरीका क्वेरी मॉनिटर -> क्वेरी आउटलेयर को देखना है। यह मूल रूप से उन प्रश्नों की सूची है जिनका प्रदर्शन उनके औसत से काफी अलग है।

जैसा कि आप उपरोक्त स्क्रीनशॉट में देख सकते हैं, दूसरी क्वेरी में 0.01116s (समय मिलीसेकंड में दिखाया गया है) लिया गया है, जहां उस क्वेरी के लिए औसत निष्पादन समय बहुत कम (0.000142s) है। हमारे पास मानक विचलन और अधिकतम क्वेरी निष्पादन समय पर कुछ अतिरिक्त सांख्यिकीय जानकारी भी है। प्रश्नों की ऐसी सूची बहुत उपयोगी नहीं लग सकती है - यह वास्तव में सच नहीं है। जब आप इस सूची में कोई क्वेरी देखते हैं, तो इसका मतलब है कि कुछ सामान्य से अलग था - क्वेरी नियमित समय में पूरी नहीं हुई। यह आपके सिस्टम पर कुछ प्रदर्शन समस्याओं का संकेत हो सकता है और एक संकेत हो सकता है कि आपको अन्य मीट्रिक की जांच करनी चाहिए, और जांच करनी चाहिए कि उस समय कुछ और हुआ था या नहीं।

लोग अधिकतम प्रदर्शन प्राप्त करने पर ध्यान केंद्रित करते हैं, यह भूल जाते हैं कि उच्च थ्रूपुट होना पर्याप्त नहीं है - इसे भी सुसंगत होना चाहिए। उपयोगकर्ता प्रदर्शन को स्थिर रखना पसंद करते हैं - आप अपने सिस्टम से प्रति सेकंड अधिक लेनदेन को निचोड़ने में सक्षम हो सकते हैं, लेकिन अगर इसका मतलब है कि कुछ लेनदेन सेकंड के लिए रुकने लगेंगे, तो यह इसके लायक नहीं है। ClusterControl में क्वेरी हिस्टोग्राम को देखने से आपको अपने क्वेरी मिक्स में ऐसी संगतता समस्याओं की पहचान करने में मदद मिलती है।

हैप्पी क्वेरी मॉनिटरिंग!

पुनश्च:ClusterControl के साथ आरंभ करने के लिए, यहां क्लिक करें!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्ट php mysql . के लिए कीवर्ड विभाजित करें

  2. कैसे नहीं REGEXP MySQL में काम करता है

  3. phpMyBackupPro - Linux के लिए एक वेब आधारित MySQL बैकअप टूल

  4. MySql CLI का उपयोग करके बड़ी CSV फ़ाइल को MySql में आयात करने का सबसे तेज़ तरीका

  5. क्या मैं PHP में PDO का उपयोग करके एक डेटाबेस बना सकता हूँ?