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

MySQL डेटाबेस प्रदर्शन देने के लिए युक्तियाँ - भाग दो

डेटाबेस के प्रदर्शन का प्रबंधन एक ऐसा क्षेत्र है जहां व्यवसाय तब होते हैं जब प्रशासक अक्सर खुद को उनकी अपेक्षा से अधिक समय देते हुए पाते हैं।

उत्पादन डेटाबेस प्रदर्शन समस्याओं की निगरानी और प्रतिक्रिया करना डेटाबेस व्यवस्थापक कार्य के भीतर सबसे महत्वपूर्ण कार्यों में से एक है। यह एक सतत प्रक्रिया है जिसके लिए निरंतर देखभाल की आवश्यकता होती है। अनुप्रयोग और अंतर्निहित डेटाबेस आमतौर पर समय के साथ विकसित होते हैं; आकार में वृद्धि, उपयोगकर्ताओं की संख्या, कार्यभार, स्कीमा परिवर्तन जो कोड परिवर्तन के साथ आते हैं।

एक MySQL डेटाबेस में लंबे समय तक चलने वाली क्वेरी शायद ही कभी अपरिहार्य होती हैं। कुछ परिस्थितियों में, लंबे समय तक चलने वाली क्वेरी एक हानिकारक घटना हो सकती है। यदि आप अपने डेटाबेस की परवाह करते हैं, तो क्वेरी प्रदर्शन को अनुकूलित करना, और लंबे समय तक चलने वाली क्वेरी का पता लगाना नियमित रूप से किया जाना चाहिए।

इस ब्लॉग में, हम वास्तविक डेटाबेस कार्यभार पर अधिक गहराई से विचार करने जा रहे हैं, विशेष रूप से चल रहे क्वेरी पक्ष पर। हम जांच करेंगे कि प्रश्नों को कैसे ट्रैक किया जाए, MySQL मेटाडेटा में हमें किस प्रकार की जानकारी मिल सकती है, ऐसे प्रश्नों का विश्लेषण करने के लिए किन उपकरणों का उपयोग करना चाहिए।

लंबे समय तक चलने वाली क्वेरी को हैंडल करना

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

  • टेबल लॉक - जब क्वेरी इसे एक्सेस करने का प्रयास कर रही हो तो टेबल को ग्लोबल लॉक या स्पष्ट टेबल लॉक द्वारा लॉक किया जाता है।
  • अक्षम क्वेरी - लुकअप या जॉइन करते समय गैर-अनुक्रमित कॉलम का उपयोग करें, इस प्रकार MySQL को स्थिति से मेल खाने में अधिक समय लगता है।
  • डेडलॉक - एक क्वेरी उन्हीं पंक्तियों तक पहुंचने की प्रतीक्षा कर रही है जो किसी अन्य अनुरोध द्वारा लॉक की गई हैं।
  • डेटासेट RAM में फ़िट नहीं होता - यदि आपका कार्य सेट डेटा उस कैश में फ़िट हो जाता है, तो SELECT क्वेरीज़ आमतौर पर अपेक्षाकृत तेज़ होंगी।
  • उप-इष्टतम हार्डवेयर संसाधन - यह धीमी डिस्क, RAID पुनर्निर्माण, संतृप्त नेटवर्क, आदि हो सकता है।

यदि आप देखते हैं कि किसी क्वेरी को निष्पादित होने में सामान्य से अधिक समय लगता है, तो उसकी जांच करें।

MySQL शो प्रोसेस लिस्ट का उपयोग करना

​MYSQL> SHOW PROCESSLIST;

प्रदर्शन संबंधी समस्याओं के मामले में आप आमतौर पर यह पहली चीज़ चलाते हैं। SHOW PROCESSLIST एक आंतरिक mysql कमांड है जो आपको दिखाता है कि कौन से थ्रेड चल रहे हैं। आप इस जानकारी को info_schema.PROCESSLIST टेबल या mysqladmin प्रोसेस लिस्ट कमांड से भी देख सकते हैं। यदि आपके पास PROCESS विशेषाधिकार है, तो आप सभी थ्रेड देख सकते हैं। आप क्वेरी आईडी, निष्पादन समय, इसे कौन चलाता है, क्लाइंट होस्ट इत्यादि जैसी जानकारी देख सकते हैं। MySQL स्वाद और वितरण (ओरेकल, मारियाडीबी, पेरकोना) के आधार पर थोड़ी सावधान जानकारी के साथ जानकारी

SHOW PROCESSLIST;

+----+-----------------+-----------+------+---------+------+------------------------+------------------+----------+

| Id | User            | Host | db | Command | Time | State                  | Info | Progress |

+----+-----------------+-----------+------+---------+------+------------------------+------------------+----------+

|  2 | event_scheduler | localhost | NULL | Daemon  | 2693 | Waiting on empty queue | NULL   | 0.000 |

|  4 | root            | localhost | NULL | Query   | 0 | Table lock   | SHOW PROCESSLIST | 0.000 |

+----+-----------------+-----------+------+---------+------+------------------------+------------------+----------+

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

MySQL Pt-query-digest का उपयोग करना

यदि आप किसी विशेष कार्यभार के बारे में अधिक जानकारी देखना चाहते हैं तो pt-query-digest का उपयोग करें। पीटी-क्वेरी-डाइजेस्ट MySQL प्रश्नों का विश्लेषण करने के लिए Percona का एक Linux टूल है। यह पेरकोना टूलकिट का हिस्सा है जिसे आप यहां पा सकते हैं। यह डेबियन, उबंटू और रेडहैट जैसे सबसे लोकप्रिय 64 बिट लिनक्स वितरण का समर्थन करता है।

इसे स्थापित करने के लिए आपको पेरकोना रिपॉजिटरी को कॉन्फ़िगर करना होगा और फिर पेरोना-टूलकिट पैकेज स्थापित करना होगा।

अपने पैकेज मैनेजर का उपयोग करके Percona टूलकिट स्थापित करें:

डेबियन या उबंटू:

sudo apt-get install percona-toolkit

आरएचईएल या सेंटोस:

sudo yum install percona-toolkit

Pt-query-digest प्रक्रिया सूची, सामान्य लॉग, बाइनरी लॉग, धीमी लॉग या tcpdump से डेटा स्वीकार करता है इसके अलावा, एक परिभाषित अंतराल पर MySQL प्रक्रिया सूची को मतदान करना संभव है - एक प्रक्रिया जो संसाधन-गहन और आदर्श से बहुत दूर हो सकता है, लेकिन फिर भी एक विकल्प के रूप में उपयोग किया जा सकता है।

पीटी-क्वेरी-डाइजेस्ट का सबसे सामान्य स्रोत धीमी क्वेरी लॉग है। आप पैरामीटर log_slow_verbosity के साथ नियंत्रित कर सकते हैं कि वहां कितना डेटा जाएगा।

ऐसी कई चीजें हैं जिनके कारण क्वेरी को निष्पादित होने में अधिक समय लग सकता है:

  • माइक्रोटाइम - माइक्रोसेकंड सटीक के साथ क्वेरी।
  • query_plan - क्वेरी के निष्पादन योजना के बारे में जानकारी।
  • innodb  - InnoDB आँकड़े।
  • न्यूनतम - केवल माइक्रोटाइम को सक्षम करने के बराबर।
  • मानक - माइक्रोटाइम को सक्षम करने के बराबर, innodb.
  • पूर्ण - अन्य सभी मानों के समतुल्य या बिना प्रोफ़ाइलिंग और profile_use_getrusage विकल्पों के एक साथ।
  • प्रोफाइलिंग - सभी कनेक्शनों में सभी प्रश्नों की प्रोफाइलिंग सक्षम करता है।
  • profiling_use_getrusage - getrusage फ़ंक्शन के उपयोग को सक्षम करता है।

स्रोत:Percona दस्तावेज़ीकरण

पूर्णता के लिए log_slow_verbosity=full का उपयोग करें जो एक सामान्य मामला है।

धीमी क्वेरी लॉग

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

[mysqld]
slow_query_log=1
log_queries_not_using_indexes=1
long_query_time=0.1

धीमे क्वेरी लॉग का उपयोग उन प्रश्नों को खोजने के लिए किया जा सकता है जो निष्पादित होने में लंबा समय लेते हैं और इसलिए अनुकूलन के लिए उम्मीदवार हैं। हालाँकि, एक लंबे धीमे क्वेरी लॉग की जाँच करना एक समय लेने वाला कार्य हो सकता है। MySQL धीमी क्वेरी लॉग फ़ाइलों को पार्स करने और उनकी सामग्री को संक्षेप में प्रस्तुत करने के लिए उपकरण हैं जैसे mysqldumpslow, pt-query-digest.

प्रदर्शन स्कीमा

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

  • events_statements_current
  • events_statements_history
  • events_statements_history_long
  • events_statements_summary_by_digest
  • events_statements_summary_by_user_by_event_name
  • events_statements_summary_by_host_by_event_name

MySQL 5.7.7 और उच्चतर में sys स्कीमा शामिल है, वस्तुओं का एक सेट जो DBA और डेवलपर्स को प्रदर्शन स्कीमा द्वारा एकत्र किए गए डेटा को अधिक आसानी से समझने योग्य रूप में व्याख्या करने में मदद करता है। Sys स्कीमा ऑब्जेक्ट का उपयोग विशिष्ट ट्यूनिंग और निदान उपयोग मामलों के लिए किया जा सकता है।

नेटवर्क ट्रैकिंग

क्या होगा यदि हमारे पास क्वेरी लॉग या सीधे एप्लिकेशन लॉग तक पहुंच नहीं है। उस स्थिति में, हम tcpdump और pt-query डाइजेस्ट के संयोजन का उपयोग कर सकते हैं जो प्रश्नों को पकड़ने में मदद कर सकता है।

$ tcpdump -s 65535 -x -nn -q -tttt -i any port 3306 > mysql.tcp.txt

कैप्चर प्रक्रिया समाप्त होने के बाद, हम डेटा को संसाधित करने के लिए आगे बढ़ सकते हैं:

$ pt-query-digest --limit=100% --type tcpdump mysql.tcp.txt > ptqd_tcp.out

ClusterControl क्वेरी मॉनिटर

ClusterControl Query Monitor क्लस्टर नियंत्रण में एक मॉड्यूल है जो डेटाबेस गतिविधि के बारे में संयुक्त जानकारी प्रदान करता है। यह शो प्रक्रिया सूची या धीमी क्वेरी लॉग जैसे कई स्रोतों से जानकारी एकत्र कर सकता है और इसे पूर्व-एकत्रित तरीके से प्रस्तुत कर सकता है।

एसक्यूएल मॉनिटरिंग को तीन खंडों में बांटा गया है।

प्रमुख प्रश्न

उन प्रश्नों के बारे में जानकारी प्रस्तुत करता है जो संसाधनों का एक महत्वपूर्ण हिस्सा लेते हैं।

चल रही क्वेरी

यह सभी डेटाबेस क्लस्टर नोड्स से एक दृश्य में संयुक्त जानकारी की एक प्रक्रिया सूची है। आप इसका उपयोग उन प्रश्नों को समाप्त करने के लिए कर सकते हैं जो आपके डेटाबेस संचालन को प्रभावित करते हैं।

क्वेरी आउटलेयर

क्वेरी की सूची प्रस्तुत करें जिनका निष्पादन समय औसत से अधिक है।

निष्कर्ष

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डायनामिक कॉलम को पंक्तियों में स्थानांतरित करना

  2. MySQL PDO क्वेरी के लिए बाइंडपरम में LIKE का उपयोग करना

  3. फिक्स:MySQL - उपयोगकर्ता को अस्वीकृत कमांड का चयन करें

  4. मैं दो MySQL तालिकाओं को कैसे मर्ज कर सकता हूं?

  5. CentOS 6 . पर MySQL कैसे स्थापित करें