अगर एक बात है जो मैं कह सकता हूं कि MySQL के बारे में यह है कि InnoDB, इसका ट्रांसेक्शनल (ACID-compliant) स्टोरेज इंजन, वास्तव में मल्टीथ्रेडेड है। हालाँकि, यह उतना ही गुणित है जितना कि आप CONFIGURE IT! यहां तक कि सही "बॉक्स से बाहर," एक डिफ़ॉल्ट सीपीयू वातावरण में InnoDB शानदार प्रदर्शन करता है। InnoDB मल्टीथ्रेडिंग क्षमताओं का लाभ उठाने के लिए, आपको कई विकल्पों को सक्रिय करना याद रखना चाहिए।
innodb_thread_concurrency ऊपरी समवर्ती धागों की संख्या पर ऊपरी सीमा निर्धारित करता है जिसे InnoDB खुला रख सकता है। इसके लिए सेट करने के लिए सबसे अच्छा राउंड नंबर (सीपीयू का 2 एक्स नंबर) + डिस्क की संख्या है। अद्यतन : जैसा कि मैंने पेरकोना एनवाईसी कॉन्फ्रेंस से पहली बार सीखा है, आपको इनओबीडी स्टोरेज इंजन को अलर्ट करने के लिए इसे 0 पर सेट करना चाहिए ताकि जिस पर्यावरण में यह चल रहा है उसके लिए सबसे अच्छी संख्या में थ्रेड मिलें।
innodb_concurrency_ticket ऐसे थ्रेड्स की संख्या सेट करता है जो इंक्यूबेशन के साथ कंसीडर चेकिंग को बायपास कर सकते हैं। उस सीमा तक पहुँच जाने के बाद, थ्रेड कंसिस्टेंसी जाँच फिर से आदर्श बन जाती है।
innodb_commit_concurrency समवर्ती लेनदेन की संख्या निर्धारित करता है जिसे प्रतिबद्ध किया जा सकता है। चूंकि डिफॉल्ट 0 होता है, इसे सेट न करना किसी भी तरह के लेनदेन को एक साथ करने की अनुमति देता है।
innodb_thread_sleep_delay, इनसोबी क्यू को पुनः दर्ज करने से पहले एक InnoDB धागा मिलिसेकंड की संख्या निर्धारित करता है। डिफ़ॉल्ट 10000 (10 सेकंड) है।
innodb_read_io_threads और innodb_write_io_threads (MySQL 5.1.38 के बाद से दोनों) पढ़े और लिखने के लिए निर्दिष्ट थ्रेड की संख्या आवंटित करते हैं। डिफ़ॉल्ट 4 है और अधिकतम 64 है।
innodb_replication_delay थ्रेड में देरी को थोपता है दास पर innodb_thread_concurrency पहुँच जाता है।
innodb_read_ahead_threshold एसिंक्रोनस रीडिंग पर स्विच करने से पहले extents की निर्धारित संख्या (64 पृष्ठ [पेज = 16K]) की रेखीय रीडिंग की अनुमति देता है।
अगर मैंने और विकल्प चुने तो समय बच जाएगा। आप उनके बारे में MySQL के डॉक्यूमेंटेशन में पढ़ सकते हैं ।
ज्यादातर लोग इन सुविधाओं से अनजान हैं और इनोबीडी से काफी संतुष्ट हैं जो सिर्फ एसीआईडी-अनुपालन लेनदेन कर रहे हैं। यदि आप इन विकल्पों में से किसी को भी जोड़ते हैं, तो आप अपने जोखिम पर ऐसा करते हैं।
मैंने MySQL 5.5 के कई बफ़र पूल इंस्टेंसेस (9 बफ़र पूल इंस्टेंसेस में 162GB) के साथ खेला है और इस तरह से मेमोरी में डेटा ऑटो-पार्टिशन करने का प्रयास किया है। कुछ विशेषज्ञों का कहना है कि इससे आपको 50% प्रदर्शन में सुधार होना चाहिए। मुझे जो मिला, वह एक टन धागा लॉकिंग था जो वास्तव में InnoDB क्रॉल बना था। मैंने 1 बफर (162GB) पर स्विच किया और दुनिया में फिर से सब ठीक हो गया। मुझे लगता है कि आपको इसे सेट करने के लिए पेरकोना विशेषज्ञों की आवश्यकता होगी। मैं कल न्यूयॉर्क में पेरकोना MySQL सम्मेलन में आऊंगा और इस बारे में पूछूंगा कि यदि अवसर खुद ही आ जाता है।
अंत में, मल्टीओप्रोएड ऑपरेशंस के लिए अपनी डिफ़ॉल्ट सेटिंग्स को देखते हुए InnoDB अब एक बहु CPU सर्वर में अच्छा व्यवहार करता है। उन्हें घुमाते हुए बहुत सावधानी, महान धैर्य, महान दस्तावेज, और महान कॉफी (या रेड बुल, जोल्ट, आदि) लेते हैं।
सुप्रभात, शुभ संध्या, और शुभ रात्रि !!!
UPDATE 2011-05-27 20:11
गुरुवार को न्यूयॉर्क में पेरकोना MySQL सम्मेलन से वापस आ गया । क्या सम्मेलन? बहुत कुछ सीखा है, लेकिन मुझे एक जवाब मिला है कि मैं InnoDB के बारे में देखूंगा। मुझे रोनाल्ड ब्रैडफोर्ड ने बताया कि innodb_thread_concurrency को 0 पर सेट करने से InnoDB थ्रेड कॉन्सिरेन्सी के साथ आंतरिक रूप से कार्रवाई का सबसे अच्छा पाठ्यक्रम तय करेगा। मैं इसके साथ MySQL 5.5 में आगे प्रयोग करूंगा।
UPDATE 2011-06-01 11:20
जहां तक एक लंबी क्वेरी का सवाल है, तो InnoDB ACID- अनुरूप है और मल्टीवर्जन कंसीलर कंट्रोल का उपयोग करके बहुत अच्छी तरह से संचालित होता है । लेन-देन को अलगाव स्तर (डिफ़ॉल्ट रूप से दोहराए जाने योग्य रीड) में सक्षम होना चाहिए जो दूसरों को डेटा तक पहुंचने से रोकता है।
मल्टी कोर सिस्टम के रूप में, InnoDB एक लंबा सफर तय कर चुका है। अतीत में, InnoDB एक बहुरंगी वातावरण में अच्छा प्रदर्शन नहीं कर सका। मुझे याद है कि एक ही सर्वर पर एक से अधिक mysql इंस्टेंस को चलाने के लिए कई कोर प्राप्त करने के लिए CPUs में कई mysqld प्रक्रियाओं को वितरित करना है। यह अब आवश्यक नहीं है, पेरकोना के लिए धन्यवाद, और बाद में MySQL (एह, ओरेकल, यह कहते हुए कि अभी भी मुझे पागल बना देता है), क्योंकि उन्होंने InnoDB को एक अधिक परिपक्व भंडारण इंजन में विकसित किया है जो बहुत ट्यूनिंग के बिना सादगी के साथ कोर तक पहुंच सकता है। InnoDB की वर्तमान आवृत्ति आज एक कोर सर्वर में अच्छी तरह से काम कर सकती है।