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

उन्नत InnoDB सेटिंग्स के साथ MySQL के प्रदर्शन में सुधार

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

InnoDB समझाया गया

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

  • innodb_data_file_path वह फ़ाइल है जहां InnoDB तालिकाओं से डेटा संग्रहीत किया जाता है।
  • innodb_buffer_pool_size एक मेमोरी बफर है जिसका उपयोग InnoDB अपने टेबल के डेटा और इंडेक्स को कैश करने के लिए करता है।
  • innodb_log_file_size InnoDB लॉग फ़ाइलों के आकार को दर्शाता है। innodb_log_file_size जितना बड़ा होगा, क्रैश होने की स्थिति में आपको रिकवरी में उतना ही अधिक समय लगेगा।
  • innodb_log_buffer_size का उपयोग InnoDB द्वारा डिस्क पर लॉग फ़ाइलों को लिखने के लिए किया जाता है।
  • innodb_flush_log_at_trx_commit प्रदर्शन और ACID अनुपालन के बीच संतुलन को नियंत्रित करता है। डिफ़ॉल्ट मान 1 है, जो InnoDB ACID के अनुरूप बनाए रखने में मदद करता है - innodb_flush_log_at_trx_commit को 2 में बदलने से लिखने की गति बहुत तेज़ हो जाती है, लेकिन एक सेकंड तक का लेन-देन नष्ट हो सकता है।

उन्नत InnoDB सेटिंग्स भी हैं जिन्हें MySQL के प्रदर्शन को और भी बेहतर बनाने के लिए सेट किया जा सकता है। हम अब उन पर एक नज़र डालेंगे।

उन्नत InnoDB सेटिंग्स

जैसा कि पहले ही ऊपर उल्लेख किया गया है, InnoDB में उन्नत सेटिंग्स हैं जिनका उपयोग इसके प्रदर्शन को और बेहतर बनाने के लिए किया जा सकता है (हम उन सभी को पूरी तरह से सूचीबद्ध नहीं करेंगे, लेकिन जो सेटिंग्स सूचीबद्ध हैं वे आपको बहुत अच्छी देंगी InnoDB वास्तव में कितना शक्तिशाली है इसका विचार):

  • InnoDB को अक्षम किया जा सकता है - यदि आप InnoDB को अक्षम करना चाहते हैं, तो बस my.cnf फ़ाइल को संशोधित करें और [mysqld] अनुभाग के अंतर्गत स्किप-इनोडब जोड़ें। उसके बाद, अपने MySQL सर्वर को पुनरारंभ करें - InnoDB अब अक्षम होना चाहिए। वैकल्पिक रूप से, आप --innodb विकल्प का उपयोग कर सकते हैं:इसे OFF पर सेट करने से इंजन निष्क्रिय हो जाता है। हालांकि ध्यान दें कि इन विकल्पों को MySQL 5.7.5 के रूप में हटा दिया गया है।
  • InnoDB एक विन्यास योग्य लॉकिंग तंत्र भी प्रदान करता है जो SQL कथनों के प्रदर्शन में सुधार कर सकता है जो AUTO_INCREMENT कॉलम के साथ तालिकाओं में पंक्तियाँ जोड़ते हैं:ऑटो-इन्क्रीमेंट मोड को innodb_autoinc_lock_mode विकल्प का उपयोग करके स्टार्टअप पर कॉन्फ़िगर किया जा सकता है। लॉक मोड को निर्दिष्ट करने के लिए विकल्प में तीन सेटिंग्स हैं - लॉक मोड 0 ("पारंपरिक"), 1 ("लगातार") या 2 ("इंटरलीव्ड") हो सकता है। मान डेटाबेस इंसर्ट के प्रकार के आधार पर प्रदर्शन प्रदान करते हैं। संक्षेप में, 0 MySQL और Innodb के पुराने संस्करणों के साथ संगतता प्रदान करता है। 1 का मान कथन-आधारित प्रतिकृति (SBR) के लिए अधिक सुरक्षा और नियतात्मक दृष्टिकोण प्रदान करता है। जबकि 2 के मान में अधिक स्केलेबल और सबसे तेज़ लॉक मोड है, फिर भी किसी दिए गए स्टेटमेंट द्वारा डाली गई पंक्तियाँ लगातार नहीं हो सकती हैं। अधिक जानकारी के लिए MySQL दस्तावेज़ देखें।
  • InnoDB आपको बफर पूल को कई खंडों में विभाजित करने की क्षमता देता है (यह सुविधा केवल MySQL 5.5 से उपलब्ध है) - innodb_buffer_pool_instances सेटिंग आपको कई कोर चलाने वाली मशीनों पर MySQL की मापनीयता में सुधार करने में सक्षम बनाती है। डिफ़ॉल्ट रूप से, इस सेटिंग का मान 1 है यदि innodb_buffer_pool_size 1GB से कम है और 8 अन्यथा:संख्या उन क्षेत्रों की संख्या निर्दिष्ट करती है जिनमें InnoDB बफर पूल विभाजित है। इस सेटिंग का उपयोग अधिक कोर संलग्न करने के लिए किया जा सकता है, हम बाद में बताएंगे कि कैसे।
  • InnoDB चार लेन-देन अलगाव स्तर प्रदान करता है (<5.7 में tx_isolation लेकिन संस्करण 5.7 में लेनदेन_अलगाव):UNCOMMITTED पढ़ें, प्रतिबद्ध पढ़ें, दोहराने योग्य पढ़ें और SERIALIZABLE:ये अलगाव स्तर ACID परिवर्णी शब्द में "I" हैं। :
    • जब READ UNCOMMITTED उपयोग में हो, तो एक लेन-देन में दूसरे लेन-देन द्वारा किए गए परिवर्तन देखे जा सकते हैं। यह अलगाव स्तर गंदे पढ़ने की अनुमति देता है।
    • जब प्रतिबद्ध पढ़ें उपयोग में है, तो आप निश्चिंत हो सकते हैं कि पढ़ा गया कोई भी डेटा उस समय प्रतिबद्ध था जब इसे पढ़ा गया था।
    • जब रिपीटेबल रीड उपयोग में होता है, तो एक उच्च आइसोलेशन स्तर उपयोग में होता है। रीड कमिटेड स्तर द्वारा गारंटीकृत हर चीज के अलावा, यह इस बात की भी गारंटी देता है कि पहले से पढ़ा गया कोई भी डेटा बदल नहीं सकता है।
    • जब SERIALIZABLE उपयोग में होता है, तो एक और भी उच्च आइसोलेशन स्तर उपयोग में होता है। दोहराने योग्य रीड आइसोलेशन स्तर द्वारा गारंटीकृत हर चीज के अलावा, यह इस बात की भी गारंटी देता है कि बाद में पढ़ने से कोई नया डेटा नहीं देखा जा सकता है।
  • InnoDB आपको innodb_io_capacity चर को संशोधित करके InnoDB के लिए उपलब्ध समग्र I/O क्षमता को परिभाषित करने की भी अनुमति देता है। इस चर का मान लगभग IOPS की संख्या पर सेट किया जाना चाहिए जो सिस्टम प्रति सेकंड प्रदर्शन कर सकता है:इस पैरामीटर का मान सेट करते समय, ध्यान रखें कि लगभग 100 मान HDD के लिए अधिक उपयुक्त हैं, जबकि SSD को उच्च मानों से लाभ हो सकता है . Innodb_io_capacity_max चर भी सहायक हो सकता है:यह चर InnoDB को अधिक आक्रामक रूप से फ्लश करने की अनुमति देता है, जिसका अर्थ है कि I/O संचालन की दर innodb_io_capity द्वारा परिभाषित सीमा से अधिक हो सकती है - ऐसी स्थितियों में, संचालन innodb_io_capity_max चर द्वारा परिभाषित मान से अधिक नहीं होगा। ।
  • InnoDB आपको यह नियंत्रित करने की भी अनुमति देता है कि I/O संचालन के लिए कितने बैकग्राउंड थ्रेड उपलब्ध हैं:रीड ऑपरेशंस के लिए आवंटित I/O थ्रेड्स की संख्या को innodb_read_io_threads वेरिएबल द्वारा नियंत्रित किया जा सकता है, जबकि I/ संचालन लिखने के लिए आवंटित ओ थ्रेड्स को innodb_write_io_threads चर द्वारा नियंत्रित किया जा सकता है। इन दोनों मापदंडों के लिए डिफ़ॉल्ट मान 4 है और अधिकतम अनुमत मान 64 है।
  • InnoDB में कुछ InnoDB चेतावनियों को त्रुटियों में बदलने की क्षमता है:ऐसा करने के लिए, बस innodb_strict_mode वैरिएबल को ON पर सेट करें:यह वैरिएबल CREATE TABLE, ALTER TABLE और CREATE INDEX ऑपरेशंस के लिए सिंटैक्स त्रुटियों से निपटने को प्रभावित करता है। :इस चर को अक्षम करने से "पंक्ति का आकार बहुत बड़ा" त्रुटियाँ हल हो सकती हैं। सख्त मोड को अक्षम करने के लिए, innodb_strict_mode को बंद पर सेट करें।
  • InnoDB_old_blocks_time वेरिएबल को बढ़ाकर बफर पूल में कैश्ड डेटा के साथ हस्तक्षेप करने वाले फुल टेबल स्कैन से InnoDB को कुछ हद तक सुरक्षित किया जा सकता है। इस सेटिंग के लिए न्यूनतम मान 0 है, डिफ़ॉल्ट मान 1000 है।
  • यदि आप FULLTEXT अनुक्रमणिका वाली InnoDB तालिकाओं पर रखरखाव संचालन चलाते हैं, तो innodb_optimize_fulltext_only चर को चालू करने पर विचार करें - इस चर के सक्षम होने के बाद, OPTIMIZE TABLE क्वेरी तेजी से चलनी चाहिए क्योंकि यह डेटा के पुनर्गठन को छोड़ देगी तालिका में। ध्यान दें कि यह सेटिंग केवल अस्थायी रूप से सक्षम करने के लिए अभिप्रेत है ताकि अनुकूलन समाप्त होने के बाद आप इसे बंद करना चाहें।
  • InnoDB को रीड-ओनली मोड में शुरू करने के लिए, innodb_read_only सेटिंग को इनेबल करें। जब यह सेटिंग सक्षम होती है, तो आप InnoDB तालिकाओं को क्वेरी कर सकते हैं जहां MySQL डेटा निर्देशिका केवल-पढ़ने के लिए मीडिया पर है।

InnoDB को और अधिक सक्रिय बनाना

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

  1. innodb_thread_concurrency विकल्प को उसके डिफ़ॉल्ट मान 0 पर छोड़ दें। ऐसा करके आप InnoDB को समवर्ती टिकटों की सर्वोत्तम संख्या तय करने देते हैं (वे थ्रेड की संख्या निर्धारित करते हैं जो एक साथ InnoDB में प्रवेश कर सकते हैं) किसी दिए गए MySQL के लिए खोलने के लिए उदाहरण सेटअप। 10.5 से शुरू होने वाले मारियाडीबी के लिए, यह पदावनत के रूप में चिह्नित है, इसलिए यह MySQL के लिए इसे 0 पर सेट करने के लिए समझ में आता है क्योंकि कंप्यूटिंग संसाधनों को MySQL के शुरुआती दिनों की तुलना में परिष्कृत किया गया है।
  2. एक बार innodb_thread_concurrency विकल्प के 0 पर सेट हो जाने पर, innodb_read_io_threads और innodb_write_io_threads दोनों को उनके 64 के अधिकतम मान पर सेट करें। इसमें अधिक कोर लगे होने चाहिए।

सारांश

संक्षेप में, InnoDB एक अत्यंत शक्तिशाली स्टोरेज इंजन है। इस स्टोरेज इंजन का प्रदर्शन इस इंजन द्वारा उपयोग की जा रही सेटिंग्स से सीधे प्रभावित होता है। इसलिए यदि आप अपने 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. डेटाबेस को ऑप्टिमाइज़ करने के लिए MySQL परफॉर्मेंस ट्यूनिंग टिप्स

  2. डेटाबेस के लिए उपयोगकर्ता को MySQL अनुदान विशेषाधिकार

  3. दिनांक स्ट्रिंग को mysql डेटाटाइम फ़ील्ड में बदलें

  4. ड्रॉप टेबल यदि MySQL में मौजूद है

  5. क्या MySQL उन स्तंभों का चयन करने की अनुमति देकर मानक को तोड़ रहा है जो खंड द्वारा समूह का हिस्सा नहीं हैं?