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

डेटाबेस को ऑप्टिमाइज़ करने के लिए MySQL परफॉर्मेंस ट्यूनिंग टिप्स

स्ट्रक्चर्ड क्वेरी लैंग्वेज (एसक्यूएल) एक विशेष-उद्देश्य वाली प्रोग्रामिंग भाषा है जिसका उपयोग डेटाबेस से डेटा को स्टोर करने, हेरफेर करने और पुनर्प्राप्त करने के लिए किया जाता है। इसे MySQL, Postgres, Oracle, SQL Server, और अन्य सहित कई रिलेशनल डेटाबेस सिस्टम में एप्लिकेशन मिले हैं।

SQL स्टेटमेंट का उपयोग करके, डेवलपर्स आसानी से विभिन्न कार्यात्मक डेटाबेस संचालन जैसे डेटा बनाना, अपडेट करना और हटाना करते हैं।

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

बढ़ते डेटा वॉल्यूम और लगातार बदलते वर्कलोड की अतिरिक्त जटिलता के साथ, डेटाबेस प्रदर्शन ट्यूनिंग और MySQL क्वेरी ऑप्टिमाइज़ेशन अब संसाधन उपयोग और सिस्टम प्रदर्शन को अधिकतम करने के लिए आवश्यक हैं।

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

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


कोर वेब वाइटल अपडेट के लिए तैयार हो जाएं

ट्रैफ़िक खोने से पहले अपनी वेबसाइट को गति देने के लिए ईबुक।

धन्यवाद

आपकी सूची 'वे टू योर इनबॉक्स' पर है।


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

MySQL प्रदर्शन ट्यूनिंग के लाभ

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

MySQL क्वेरी प्रदर्शन ऑप्टिमाइज़ेशन के लिए ट्यूनिंग डेटाबेस में कोई कम चुनौतियाँ नहीं हैं। हालाँकि, एक बार ठीक से ट्यून करने के बाद, डेटाबेस महान कार्यक्षमताओं के साथ सार्थक प्रदर्शन परिणाम देता है। यह न केवल अवांछित कार्य भार को कम करता है बल्कि तेजी से डेटा पुनर्प्राप्ति के लिए MySQL डेटाबेस को भी अनुकूलित करता है।

शायद आपको यह भी पसंद आए: आपकी वेबसाइटों को अनुकूलित करने के लिए PHP प्रदर्शन युक्तियाँ

MySQL क्वेरी ऑप्टिमाइज़ेशन दिशानिर्देशों के साथ क्वेरी को ऑप्टिमाइज़ करें

अपने MySQL प्रदर्शन ट्यूनिंग और डेटाबेस गति को अनुकूलित करने के लिए इन सर्वोत्तम प्रथाओं का पालन करें।

सबसे पहले, WHERE, JOIN, ORDER BY, और GROUP BY क्लॉज में सभी विधेय का अनुक्रमण सुनिश्चित करें। WebSphere कॉमर्स SQL ​​प्रदर्शन को बढ़ाने के लिए विधेय के अनुक्रमण पर जोर देता है। क्योंकि SQL क्वेरी का अनुचित अनुक्रमण तालिका स्कैन का कारण बन सकता है, जो अंततः लॉकिंग समस्याओं और अन्य समस्याओं का कारण बनता है।

इसलिए, मैं सभी विधेय स्तंभों को अनुक्रमित करने की अत्यधिक अनुशंसा करता हूं ताकि डेटाबेस MySQL क्वेरी अनुकूलन का अनुभव कर सके।

शायद आपको यह भी पसंद आए: लारवेल प्रदर्शन अनुकूलन मार्गदर्शिका

विधेय में फ़ंक्शन का उपयोग करने से बचें

डेटाबेस किसी इंडेक्स का उपयोग नहीं करता है यदि उसके कॉलम में कुछ फ़ंक्शन पूर्वनिर्धारित हैं।

उदाहरण के लिए:

SELECT * FROM TABLE1 WHERE UPPER(COL1)='ABC'Copy

UPPER() फ़ंक्शन के कारण, डेटाबेस COL1 पर अनुक्रमणिका का उपयोग नहीं करता है। यदि SQL में उस फ़ंक्शन से बचने का कोई तरीका नहीं है, तो आपको एक नया फ़ंक्शन-आधारित अनुक्रमणिका बनाना होगा या प्रदर्शन को बेहतर बनाने के लिए डेटाबेस में कस्टम कॉलम बनाना होगा।

विधेय की शुरुआत में वाइल्डकार्ड (%) का उपयोग करने से बचें

विधेय LIKE '%abc' एक पूर्ण तालिका स्कैन का कारण बनता है। उदाहरण के लिए:

SELECT * FROM TABLE1 WHERE COL1 LIKE '%ABC'Copy

ज्यादातर मामलों में, वाइल्डकार्ड का यह उपयोग प्रमुख प्रदर्शन सीमाएं लाता है।

चयन खंड में अनावश्यक कॉलम से बचें

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

यदि संभव हो तो बाहरी जुड़ाव के बजाय आंतरिक जुड़ाव का उपयोग करें

आवश्यक होने पर ही बाहरी जुड़ाव का उपयोग करें। इसका अनावश्यक रूप से उपयोग न केवल डेटाबेस प्रदर्शन को सीमित करता है बल्कि MySQL क्वेरी अनुकूलन विकल्पों को भी सीमित करता है, जिसके परिणामस्वरूप SQL कथनों का निष्पादन धीमा हो जाता है।

आवश्यक होने पर ही DISTINCT और UNION का उपयोग करें

बिना किसी बड़े उद्देश्य के UNION और DISTINCT ऑपरेटरों का उपयोग करने से अवांछित सॉर्टिंग और SQL निष्पादन धीमा हो जाता है। UNION के बजाय, UNION ALL का उपयोग करने से प्रक्रिया में अधिक दक्षता आती है और MySQL के प्रदर्शन में अधिक सुधार होता है।

यदि आप क्रमबद्ध परिणाम प्राप्त करने की अपेक्षा करते हैं तो SQL में ORDER BY क्लॉज अनिवार्य है

ORDER BY कीवर्ड पूर्वनिर्धारित स्टेटमेंट कॉलम में परिणाम-सेट को सॉर्ट करता है। हालाँकि यह कथन डेटाबेस व्यवस्थापकों के लिए सॉर्ट किए गए डेटा को प्राप्त करने के लिए लाभ लाता है, यह SQL निष्पादन में थोड़ा सा प्रदर्शन प्रभाव भी पैदा करता है। क्योंकि क्वेरी को पहले अंतिम परिणाम-सेट बनाने के लिए डेटा को सॉर्ट करने की आवश्यकता होती है, जिससे SQL निष्पादन में थोड़ा जटिल ऑपरेशन होता है।

शायद आपको यह भी पसंद आए: MySQL में दो टेबल्स को कैसे जॉइन करें

एक कतार के रूप में MySQL का प्रयोग न करें

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

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

शायद आपको यह भी पसंद आए: कतारबद्ध करने के लिए रेडिस का उपयोग कैसे करें

चार मूलभूत संसाधनों को समझें

डेटाबेस कार्य करने के लिए आपको चार मूलभूत संसाधनों की आवश्यकता होती है। सीपीयू, डिस्क, मेमोरी और नेटवर्क। यदि इनमें से कोई भी ठीक से काम नहीं करता है, तो यह अंततः डेटाबेस सर्वर को प्रभावित करता है और खराब प्रदर्शन में परिणाम देता है।

मूलभूत संसाधनों को ठीक से समझने के लिए, आपको दो विशेष क्षेत्रों पर ध्यान केंद्रित करने की आवश्यकता है अर्थात सही हार्डवेयर का चयन करना और इसके साथ समस्याओं का निवारण करना।

MySQL डेटाबेस के लिए हार्डवेयर चुनते समय हमेशा चौतरफा प्रदर्शन घटकों का उपयोग करना सुनिश्चित करें। न केवल स्टैक के बीच सर्वश्रेष्ठ का चयन करें बल्कि यह भी सुनिश्चित करें कि उनके बीच सही संतुलन होना चाहिए। हमने अक्सर देखा है कि संगठन तेज सीपीयू और बड़े डिस्क वाले सर्वरों का चयन करते हैं, लेकिन वे भूली हुई मेमोरी के साथ भ्रमित हो जाते हैं जो अंततः प्रदर्शन को मार देती है।

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

जब समस्या निवारण की बात आती है, तो हमेशा सभी चार मूलभूत संसाधनों के प्रदर्शन की जांच करते रहें। गुणात्मक रूप से सत्यापित करें कि वे मानदंडों में सुधार की आवश्यकता के अनुसार प्रदर्शन कर रहे हैं। इस ऑडिट को नियमित रूप से ध्यान में रखने से प्रमुख समस्याओं का शीघ्र समाधान हो जाएगा।

पेजिनेशन क्वेरीज़

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

आप यूजर इंटरफेस के भीतर ही अनुकूलन पा सकते हैं। परिणामों में पृष्ठों की सटीक संख्या और किसी व्यक्तिगत पृष्ठ के लिंक दिखाने के बजाय, आप केवल अगले पृष्ठ का लिंक दिखा सकते हैं। आप लोगों को अप्रासंगिक पृष्ठों पर जाने से भी रोक सकते हैं।

क्वेरी पक्ष पर, ऑफ़सेट के साथ LIMIT का उपयोग करने के बजाय, आप अपनी आवश्यकता से एक और पंक्ति का चयन कर सकते हैं, और जब उपयोगकर्ता "अगला पृष्ठ" लिंक पर क्लिक करता है, तो आप परिणामों के अगले सेट के लिए उस अंतिम पंक्ति को शुरुआती बिंदु के रूप में नामित कर सकते हैं . उदाहरण के लिए, यदि उपयोगकर्ता ने 101 से 120 पंक्तियों वाला पृष्ठ देखा है, तो आपको पंक्ति 121 का भी चयन करना होगा; अगले पेज को रेंडर करने के लिए, आप सर्वर को 121, सीमा 21 से अधिक या उसके बराबर पंक्तियों के लिए क्वेरी करेंगे।

MySQL सबक्वेरी को ऑप्टिमाइज़ करना

सबसे महत्वपूर्ण सलाह जो मैं आपको सबक्वेरी के बारे में दे सकता हूं, वह यह है कि जहां संभव हो, कम से कम MySQL के वर्तमान संस्करणों में आपको एक जॉइन पसंद करना चाहिए।

सबक्वेरी ऑप्टिमाइज़र टीम द्वारा गहन कार्य का विषय हैं, और MySQL के आगामी संस्करणों में अधिक सबक्वेरी ऑप्टिमाइज़ेशन हो सकते हैं। जारी कोड में कौन से अनुकूलन समाप्त होंगे, और वे कितना अंतर करेंगे, इसकी जांच करते रहें। यहाँ मेरा कहना यह है कि "शामिल होना पसंद करें" भविष्य-सबूत सलाह नहीं है। सर्वर हर समय स्मार्ट होता जा रहा है, और जिन मामलों में आपको यह बताना होता है कि किस तरह से कुछ करना है, बजाय इसके कि क्या परिणाम लौटाए जाएं, कम होते जा रहे हैं।

Mysql Query Cache

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

MySQL क्वेरी कैश सेट करने के लिए, आपको MySQL में कुछ सेटिंग्स जोड़नी होंगी। सबसे पहले, आपको निम्न कमांड के साथ जांचना होगा कि क्वेरी कैश उपलब्ध है या नहीं:

mysql> SHOW VARIABLES LIKE 'have_query_cache';

यह परिणाम दिखाएगा, हाँ। इसका मतलब है कि MySQL कैश ठीक काम कर रहा है।

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

| Variable_name    | Value |

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

| have_query_cache | YES   |

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

अब, आप MySQL क्वेरी कैशे आकार और प्रकार सेट कर सकते हैं। याद रखें कि न्यूनतम डिफ़ॉल्ट आकार 40KB है। अधिकतम आकार 32MB हो सकता है। आप निम्न आदेश का उपयोग करके MySQL query_cache_size सेट कर सकते हैं:

mysql> SET GLOBAL query_cache_size = 40000;

क्वेरी कैश प्रकार सभी कनेक्शनों के व्यवहार को निर्धारित कर सकता है। आप जैसे प्रश्नों के लिए क्वेरी कैश को अक्षम भी कर सकते हैं:

mysql> SET SESSION query_cache_type = OFF;

आप कनेक्शन स्थिति सेट करने के लिए 0,1 और 2 जैसे मान भी सेट कर सकते हैं।

MySQL कैशिंग के लिए Memcached का उपयोग करें

Memcached एक वितरित मेमोरी कैशिंग सिस्टम है। जब भी कोई बाहरी डेटा स्रोत पढ़ने का अनुरोध करता है, तो यह सर्वर पर दबाव को कम करने के लिए डायनेमिक मेमोरी में डेटाबेस ऑब्जेक्ट को संग्रहीत करके बड़े गतिशील डेटाबेस वाली वेबसाइटों को गति देता है। Memcached परत डेटाबेस द्वारा अनुरोध किए जाने की संख्या को कम कर देती है।

Memcached कुंजी (k) के साथ मानों (v) को संग्रहीत करता है, और डेटाबेस प्रश्नों को पार्स किए बिना कुंजी (k) के साथ मानों (v) को पुनर्प्राप्त करता है और इन सभी परेशानियों से दूर रहता है।

Memcached के बारे में अधिक पढ़ने के लिए, आप php में Memcache को कैसे सेट करें, इस पर गाइड पढ़ सकते हैं।

रैप अप!

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

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


  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. ऑटो-इंक्रीमेंट फ़ील्ड में छेद कैसे भरें?

  3. नोडज में mysql क्वेरी कॉलबैक के लिए पैरामीटर कैसे पास करें

  4. MySQL एक चर आकार चर सूची के साथ तैयार बयान

  5. MySQL में दो तिथियों के बीच दिनों की संख्या कैसे खोजें