अपनी MySQL टेबल्स पर उपयुक्त इंडेक्स होने से, आप SELECT क्वेश्चन के प्रदर्शन को काफी बढ़ा सकते हैं। लेकिन, क्या आप जानते हैं कि अपनी टेबल में इंडेक्स जोड़ना अपने आप में एक महंगा ऑपरेशन है, और आपकी टेबल के आकार के आधार पर इसे पूरा करने में लंबा समय लग सकता है? इस समय के दौरान, आपको प्रश्नों के खराब प्रदर्शन का अनुभव होने की भी संभावना है क्योंकि आपके सिस्टम संसाधन अनुक्रमणिका-निर्माण कार्य में भी व्यस्त हैं। इस ब्लॉग पोस्ट में, हम MySQL अनुक्रमणिका निर्माण प्रक्रिया को इस तरह अनुकूलित करने के लिए एक दृष्टिकोण पर चर्चा करते हैं कि आपका नियमित कार्यभार प्रभावित न हो।
MySQL रोलिंग इंडेक्स क्रिएशन
हम इस दृष्टिकोण को 'रोलिंग इंडेक्स क्रिएशन' कहते हैं - अगर आपके पास MySQL मास्टर-स्लेव रेप्लिका सेट है, तो आप एक बार में इंडेक्स एक नोड बना सकते हैं। आपको केवल स्लेव नोड्स पर इंडेक्स बनाना चाहिए ताकि मास्टर का प्रदर्शन प्रभावित न हो। जब दासों पर अनुक्रमणिका निर्माण पूरा हो जाता है, तो हम वर्तमान स्वामी को पदावनत कर देते हैं और नए स्वामी के रूप में अप-टू-डेट दासों में से एक को बढ़ावा देते हैं। इस समय, मूल मास्टर नोड (जो अब एक दास है) पर सूचकांक निर्माण जारी है। एक छोटी अवधि (दसियों सेकंड) होगी जिसके दौरान आप विफलता के कारण अपने डेटाबेस से कनेक्टिविटी खो देंगे, लेकिन एप्लिकेशन-स्तरीय पुन:प्रयास करके इसे दूर किया जा सकता है।
रोलिंग इंडेक्स निर्माण के प्रदर्शन लाभ
हमने रोलिंग इंडेक्स क्रिएशन के प्रदर्शन लाभों को समझने के लिए एक छोटा सा प्रयोग किया।
इस परीक्षण में Sysbench का उपयोग करके बनाए गए एक MySQL डेटासेट का उपयोग किया गया था जिसमें प्रत्येक में 50 मिलियन पंक्तियों वाली 3 तालिकाएँ थीं। हमने 30 क्लाइंट के साथ 10 मिनट के लिए संतुलित कार्यभार (50% रीड और 50% राइट) चलाने के साथ MySQL मास्टर पर लोड उत्पन्न किया, और साथ ही, दो परिदृश्यों में एक टेबल पर एक साधारण सेकेंडरी इंडेक्स बनाया:
- सीधे मास्टर पर इंडेक्स बनाना
- दास पर अनुक्रमणिका बनाना
MySQL टेस्ट बेड कॉन्फ़िगरेशन
MySQL इंस्टेंस प्रकार | EC2 इंस्टेंस m4.बड़ा 8GB RAM के साथ |
---|---|
परिनियोजन प्रकार | 2 नोड मास्टर-स्लेव सेमीसिंक्रोनस प्रतिकृति के साथ सेट |
MySQL संस्करण | 5.7.25 |
प्रदर्शन परिणाम
परिदृश्य | <वें शैली ="पैडिंग:10px; बॉर्डर:1px ठोस #999; पृष्ठभूमि:#f9ebd5; लाइन-ऊंचाई:1.25em;" चौड़ाई="35%">कार्यभार प्रवाह (प्रति सेकंड प्रश्न) <वें शैली ="पैडिंग:10px; बॉर्डर:1px ठोस #999; पृष्ठभूमि:#f9ebd5;" चौड़ाई="35%">95वीं शतमक प्रतीक्षा अवधि||
---|---|---|
मास्टर पर इंडेक्स क्रिएशन | 453.63 | 670 ms |
रोलिंग इंडेक्स क्रिएशन | 790.03 | 390 ms |
टेकअवे
इंडेक्स निर्माण को सीधे MySQL मास्टर पर चलाकर, हम केवल 60% थ्रूपुट का अनुभव कर सकते हैं जो एक रोलिंग ऑपरेशन के माध्यम से MySQL स्लेव पर इंडेक्स क्रिएशन चलाकर हासिल किया गया था। जब मास्टर सर्वर पर अनुक्रमणिका का निर्माण हुआ, तब प्रश्नों की 95वीं शतमक प्रतीक्षा अवधि भी 1.8 गुना अधिक थी।
अपने #MySQL टेबल्स पर इंडेक्स बनाने का सर्वोत्तम अभ्यास ट्वीट करने के लिए क्लिक करेंरोलिंग इंडेक्स निर्माण को स्वचालित करना
ScaleGrid आपके MySQL परिनियोजन के लिए इसे आरंभ करने के लिए एक सरल उपयोगकर्ता इंटरफ़ेस के साथ रोलिंग इंडेक्स क्रिएशन को स्वचालित करता है।
उपरोक्त UI में, आप अपने डेटाबेस और टेबल नाम का चयन कर सकते हैं, और 'इंडेक्स जोड़ें' को ऑल्टर टेबल ऑपरेशन के रूप में चुन सकते हैं। फिर, एक कॉलम नाम और इंडेक्स नाम निर्दिष्ट करें, और आपके लिए एक ऑल्टर टेबल कमांड उत्पन्न और प्रदर्शित किया जाएगा। एक बार जब आप बनाने के लिए क्लिक करते हैं, तो अनुक्रमणिका निर्माण एक समय में एक नोड एक रोलिंग फैशन में होगा।
इसके अतिरिक्त, स्केलग्रिड अन्य सरल ऑल्टर टेबल संचालन का भी समर्थन करता है जैसे रोलिंग फैशन में आपकी तालिका में एक नया कॉलम जोड़ना। अधिक विवरण के साथ मेरे फॉलो-ऑन ब्लॉग पोस्ट के लिए बने रहें!