सारांश
MySQL C और C प्रोग्रामिंग भाषाओं पर विकसित एक रिलेशनशिप डेटाबेस प्रबंधन प्रणाली है, जो MySQL AB द्वारा बनाई गई है, जिसकी स्थापना डेविड एक्समार्क, एलन लार्सन और माइकल विडेनियस ने की थी। नवीनतम संस्करण MySQL 9.0 है।
MySQL GNU लाइसेंस के साथ एक ओपन सोर्स प्रोजेक्ट है।
MySQL अब सबसे लोकप्रिय और उपयोगी डेटाबेस प्रबंधन प्रणाली है क्योंकि यह खुला स्रोत है, इसमें पूर्ण सुविधाएँ हैं और इसका प्रदर्शन उच्च है।
वास्तुकला
- MySQL आर्किटेक्चर आरेख: स्रोत
ग्राहक परत
- MySQL सिस्टम आर्किटेक्चर की पहली परत।
- इस परत की महत्वपूर्ण सेवाएँ कनेक्शन हैंडलिंग, प्रमाणीकरण और सुरक्षा हैं।
- कनेक्शन हैंडलिंग: ग्राहकों से कनेक्शन प्रबंधित करता है। जब कोई क्लाइंट MySQL सर्वर से कनेक्ट होना चाहता है, तो कनेक्शन के लिए एक नया थ्रेड बनाया जाता है। नए कनेक्शन बनाए जाने पर सर्वर थ्रेड्स को कैश करता है।
- प्रमाणीकरण: जब कोई क्लाइंट किसी सर्वर से जुड़ता है, तो उसे कनेक्शन स्थापित करने के लिए प्रमाणीकरण जानकारी प्रदान करनी होगी। आमतौर पर, ग्राहक उपयोगकर्ता नाम और पासवर्ड का उपयोग करके प्रमाणित करते हैं।
- सुरक्षा: MySQL डेटाबेस की सुरक्षा और प्रमाणीकरण के बाद उपयोगकर्ता की अनुमतियों को सत्यापित करने के लिए कई सुविधाएँ प्रदान करता है।
सर्वर परत
- MySQL की अगली परत क्वेरी स्टेटमेंट को संसाधित करने और कई उपयोगिताएँ प्रदान करने के लिए जिम्मेदार है।
- मुख्य आकर्षण:
- पार्सर: जब कोई क्लाइंट क्वेरी स्टेटमेंट का अनुरोध करता है, तो सर्वर क्वेरी ट्री बनाने के लिए इसका विश्लेषण करता है, क्वेरी को फिर से लिखता है, और क्वेरी स्टेटमेंट को निष्पादित करने के लिए उपयोग किए जाने वाले ऑर्डर और इंडेक्स को परिभाषित करता है।
- ऑप्टिमाइज़र: यह निष्पादन से पहले क्वेरी स्टेटमेंट को ऑप्टिमाइज़ करता है। ऑप्टिमाइज़र को इसकी परवाह नहीं है कि किस इंजन का उपयोग किया जाता है, लेकिन स्टोरेज इंजन विशिष्ट क्वेरी के लिए अनुकूलन को प्रभावित कर सकता है।
- क्वेरी कैश: क्वेरी कैश एक क्वेरी स्टेटमेंट के परिणाम को संग्रहीत करता है। यदि कोई क्लाइंट दोबारा उसी क्वेरी का अनुरोध करता है, तो सर्वर पार्सिंग और अनुकूलन चरणों को दरकिनार करते हुए कैश्ड परिणाम लौटाता है। इस सुविधा को इसकी अड़चन समस्या के कारण संस्करण 8.0 या उच्चतर में बंद कर दिया गया था।
- सेवाएं एवं उपयोगिता:
- बैकअप और पुनर्स्थापना
- सुरक्षा: प्रदाता उपयोगकर्ता और अनुमति प्रणाली
- प्रतिकृति: यह मुख्य सर्वर से कई चाइल्ड सर्वरों में डेटा को कॉपी और सिंक करने की एक प्रक्रिया है।
- झुंड
- विभाजन: एक विशिष्ट तर्क का उपयोग करके तालिका को कई भागों में विभाजित करें।
- वर्कबेंच: यह एक विज़ुअल टूल है जिसे MySQL के साथ इंटरैक्ट करने और उसका उपयोग करने के लिए डिज़ाइन किया गया है।
भंडारण परत
- जिस तरह से हम डेटाबेस में डेटा संग्रहीत करते हैं, यह जिम्मेदारी की एक परत है।
- डिफ़ॉल्ट रूप से, MySQL InnoDB स्टोरेज इंजन का उपयोग करता है।
- MySQL कई अलग-अलग स्टोरेज इंजनों का समर्थन करता है:
- InnoDB (डिफ़ॉल्ट)
- माईआईएसएएम
- याद
- सीएसवी
- पुरालेख
- ब्लैक होल
- विलय
- फ़ेडरेटेड
MySQL के लिए प्रदर्शन अनुकूलित करें
SQL स्टेटमेंट को ऑप्टिमाइज़ करें
कथन स्पष्ट करें
- निष्पादन के बिना क्वेरी भविष्यवाणी
explain sql_statememnt
- निष्पादन क्वेरी के बाद समझाएं
explain analyze sql_statement
अनुक्रमण तकनीक
- यह पूछताछ और खोज करते समय प्रदर्शन को उन्नत करता है।
- एकाधिक कॉलम के लिए इंडेक्स बनाते समय, पहला कॉलम बहुत महत्वपूर्ण होता है। यह एक क्वेरी स्टेटमेंट का प्रदर्शन तय करता है। उदाहरण के लिए, यदि आप (नाम, जन्मदिन) पर एक इंडेक्स बनाते हैं, तो 'नाम' कॉलम का उपयोग करने वाली क्वेरी इस इंडेक्स का उपयोग करेगी, लेकिन 'जन्मदिन' कॉलम का उपयोग करने वाली क्वेरी नहीं करेगी।
- नया सूचकांक बनाने के लिए सिंटैक्स:
create index idx_birthday on customers(birthday);
- कमांड निर्दिष्ट इंडेक्स को क्वेरी ऑप्टिमाइज़र के लिए दुर्गम बना देगा, इस प्रकार इसे क्वेरी निष्पादन योजनाओं के लिए विचार करने से रोका जाएगा:
alter table customers alter index idx_birthday invisible;
PARTITION
- जब किसी डेटाबेस का आकार 2 जीबी (या 10 मिलियन रिकॉर्ड से अधिक) से बड़ा हो, तो आपको उस डेटाबेस के लिए विभाजन का उपयोग करना चाहिए।
- विभाजन का उपयोग करते समय, प्रदर्शन में सुधार होगा।
- विभाजन योजना उस कॉलम पर आधारित होनी चाहिए जिसका उपयोग अक्सर WHERE क्लॉज में किया जाता है।
डेटाबेस पैरामीटर अनुकूलित करें
बफ़र कैश हिट
- यह डेटा का प्रतिशत है जिसे सिस्टम भौतिक भंडारण के बजाय बफर कैश से लोड करता है।
- यदि प्रतिशत 90% से कम है, तो आपको इसे अनुकूलित करना होगा।
- 2 मापदंडों पर निर्भर:
-
Innodb_buffer_pool_read_requests: बफ़र पूल को भेजा गया कुल अनुरोध। आदेश: वैश्विक स्थिति दिखाएं जैसे '%Innodb_buffer_pool_read_requests%
-
Innodb_buffer_pool_reads: कुल अनुरोध जो मेमोरी में बफ़र पूल में नहीं पाए जाते हैं उन्हें डिस्क से पढ़ा जाना चाहिए। आदेश: वैश्विक स्थिति दिखाएं जैसे '%Innodb_buffer_pool_reads%
- गणना सूत्र:
(Innodb_buffer_pool_read_requestss - Innodb_buffer_pool_reads) x100 / Innodb_buffer_pool_read_requests
टेबल कैश हिट
- MySQL तालिका को मेमोरी में तेजी से क्वेरी करने के लिए कैश करेगा।
- यदि प्रतिशत 80% से कम है, तो आपको इसे अनुकूलित करना होगा।
- 2 मापदंडों पर निर्भर:
-
Open_tables: कुल तालिकाएँ कैश में खोली जाती हैं। आदेश: 'Open_tables' जैसी वैश्विक स्थिति दिखाएं
-
Opened_tables: कुल तालिकाएँ खोली गईं। आदेश: 'Opened_tables' जैसी वैश्विक स्थिति दिखाएं
- गणना सूत्र: Open_tables/Open_tables
तालिका परिभाषा कैश हिट
- किसी क्वेरी को निष्पादित करते समय, MySQL को तालिका के बारे में जानकारी की आवश्यकता होती है, जैसे उसका नाम, स्तंभों की संख्या और पंक्तियों की संख्या। इस जानकारी को तालिका परिभाषा के रूप में जाना जाता है।
- यदि प्रतिशत 80% से कम है, तो आपको इसे अनुकूलित करना होगा।
- 2 मापदंडों पर निर्भर:
-
Open_table_definitions: कुल परिभाषा तालिकाएँ कैश में हैं। आदेश: 'Open_table_definitions' जैसी वैश्विक स्थिति दिखाएं
-
Opened_tables: कुल परिभाषा तालिकाओं का अनुरोध किया जाता है। आदेश: 'Opened_tables' जैसी वैश्विक स्थिति दिखाएं
- गणना सूत्र: Open_table_definitions/Open_table_definitions
स्मृति में अस्थायी तालिका
- कई SQL कथन जैसे ऑर्डर, ग्रुप बाय,... को एक अस्थायी तालिका का उपयोग करना चाहिए।
- यदि प्रतिशत 80% से कम है, तो आपको इसे अनुकूलित करना होगा।
- 2 मापदंडों पर निर्भर:
-
Created_tmp_disk_tables: डिस्क पर कुल अस्थायी तालिकाएँ बनाई जाती हैं। आदेश: वैश्विक स्थिति दिखाएं जैसे '%Created_tmp_disk_tables%
-
Created_tmp_tables: कुल अस्थायी तालिकाएँ बनाई जाती हैं। आदेश: वैश्विक स्थिति दिखाएं जैसे '%Created_tmp_tables%
- गणना सूत्र: (Created_tmp_tables - Created_tmp_disk_tables)/ Created_tmp_tables
निष्कर्ष
यह ब्लॉग MySQL के बारे में शोध-आधारित ज्ञान प्रदान करता है। MySQL एक रिलेशनल डेटाबेस प्रबंधन प्रणाली है जो अपनी कम लागत, व्यापक उपयोगिताओं और उच्च प्रदर्शन के लिए जानी जाती है, जो इसे परियोजनाओं की एक विस्तृत श्रृंखला के लिए उपयुक्त बनाती है। हालाँकि यह ब्लॉग MySQL की कई विशेषताओं और पहलुओं को शामिल करता है, लेकिन जानने के लिए और भी बहुत कुछ है। मैं भविष्य के ब्लॉगों में अतिरिक्त सुविधाओं और ज्ञान के बारे में गहराई से जानकारी दूंगा।
पढ़ने के लिए धन्यवाद, और मेरे अगले ब्लॉग में मिलते हैं।
संदर्भ दस्तावेज़
- MySQL दस्तावेज़ीकरण
- MySQL कोर्स - ट्रान क्वोक ह्यू
- विकिपीडिया - MySQL