MySQL का अधिकतम मेमोरी उपयोग बहुत हद तक हार्डवेयर, आपकी सेटिंग्स और . पर निर्भर करता है डेटाबेस ही।
हार्डवेयर
हार्डवेयर स्पष्ट हिस्सा है। जितनी ज्यादा रैम उतनी ही तेज, तेज डिस्क ftw . हालांकि उन मासिक या साप्ताहिक समाचार पत्रों पर विश्वास न करें। MySQL रैखिक पैमाने पर नहीं है - Oracle हार्डवेयर पर भी नहीं। यह उससे थोड़ा पेचीदा है।
लब्बोलुआब यह है:आपके . के लिए जो सिफारिश की जाती है, उसके लिए कोई सामान्य नियम नहीं है MySQL सेटअप। यह सब वर्तमान उपयोग या अनुमानों पर निर्भर करता है।
सेटिंग और डेटाबेस
MySQL अपने व्यवहार को अनुकूलित करने के लिए अनगिनत चर और स्विच प्रदान करता है। यदि आप मुद्दों में भाग लेते हैं, तो आपको वास्तव में बैठकर (फिंग) मैनुअल पढ़ने की जरूरत है।
डेटाबेस के लिए - कुछ महत्वपूर्ण बाधाएं:
- टेबल इंजन (
InnoDB
,MyISAM
, ...) - आकार
- सूचकांक
- उपयोग
स्टैकओवरफ्लो पर अधिकांश MySQL युक्तियाँ आपको 5-8 तथाकथित महत्वपूर्ण सेटिंग्स के बारे में बताएंगी। सबसे पहले, उनमें से सभी मायने नहीं रखते - उदा। InnoDB को बहुत सारे संसाधन आवंटित करना और InnoDB का उपयोग न करना बहुत मायने नहीं रखता क्योंकि वे संसाधन बर्बाद हो जाते हैं।
या - बहुत से लोग max_connection
. को बढ़ाने का सुझाव देते हैं वेरिएबल -- ठीक है, वे कम ही जानते हैं कि इसका अर्थ यह भी है कि MySQL उन max_connections
को पूरा करने के लिए अधिक संसाधन आवंटित करेगा। - कभी जरूरत पड़ने पर। आपके DBAL में डेटाबेस कनेक्शन को बंद करने या wait_timeout
को कम करने के लिए अधिक स्पष्ट समाधान हो सकता है उन धागों को मुक्त करने के लिए।
यदि आप मेरे बहाव को पकड़ लेते हैं -- तो वास्तव में बहुत कुछ है, पढ़ने और सीखने के लिए बहुत कुछ है।
इंजन
टेबल इंजन एक बहुत ही महत्वपूर्ण निर्णय हैं, बहुत से लोग उन लोगों के बारे में जल्दी भूल जाते हैं और फिर अचानक खुद को 30 जीबी आकार के MyISAM
से लड़ते हुए पाते हैं। टेबल जो उनके पूरे एप्लिकेशन को लॉक और ब्लॉक कर देती है।
मेरे कहने का मतलब यह नहीं है कि MyISAM बेकार है , लेकिन InnoDB
MyISAM
. जितनी जल्दी या लगभग उतनी ही तेजी से प्रतिक्रिया देने के लिए ट्वीक किया जा सकता है और UPDATE
. पर रो-लॉकिंग जैसी चीज़ की पेशकश करता है जबकि MyISAM
जब यह लिखा जाता है तो पूरी तालिका को लॉक कर देता है।
यदि आप अपने स्वयं के बुनियादी ढांचे पर MySQL चलाने के लिए स्वतंत्र हैं, तो आप पेरकोना सर्वर
क्योंकि फेसबुक और गूगल (वे तेजी से जानते हैं) जैसी कंपनियों के बहुत सारे योगदानों में शामिल हैं, इसमें InnoDB
के लिए Percona का अपना ड्रॉप-इन प्रतिस्थापन भी शामिल है। , जिसे XtraDB
. कहा जाता है ।
पेरकोना-सर्वर (और -क्लाइंट) सेटअप (उबंटू पर) के लिए मेरा सार देखें:http://gist.github .com/637669
आकार
डेटाबेस का आकार बहुत, बहुत महत्वपूर्ण है - मानो या न मानो, इंटरवेब पर अधिकांश लोगों ने कभी भी एक बड़ा और गहन MySQL सेटअप नहीं लिखा है, लेकिन वे वास्तव में मौजूद हैं। कुछ लोग ट्रोल करेंगे और कुछ कहेंगे, "यूज़ पोस्टग्रेएसक्यूएल!!!111", लेकिन चलिए अभी के लिए उन्हें अनदेखा कर देते हैं।
लब्बोलुआब यह है:आकार को देखते हुए, हार्डवेयर के बारे में निर्णय लिया जाना है। आप वास्तव में 1GB RAM पर 80GB डेटाबेस को तेजी से नहीं चला सकते।
सूचकांक
यह नहीं है:जितना अधिक, उतना ही अच्छा। केवल आवश्यक सूचकांकों को सेट किया जाना है और उपयोग को EXPLAIN
. के साथ जांचना है . उसमें जोड़ें कि MySQL का EXPLAIN
वास्तव में सीमित है, लेकिन यह एक शुरुआत है।
सुझाए गए कॉन्फ़िगरेशन
इनके बारे में my-large.cnf
और my-medium.cnf
फ़ाइलें -- मैं यह भी नहीं जानता कि वे किसके लिए लिखी गई थीं। अपना खुद का रोल करें।
ट्यूनिंग प्राइमर
एक शानदार शुरुआत है ट्यूनिंग प्राइमर
. यह एक बैश स्क्रिप्ट है (संकेत:आपको linux की आवश्यकता होगी) जो SHOW VARIABLES
का आउटपुट लेती है और SHOW STATUS
और उम्मीद के मुताबिक उपयोगी सिफारिश में इसे लपेटता है। यदि आपका सर्वर कुछ समय के लिए चला है, तो अनुशंसा बेहतर होगी क्योंकि उनके आधार पर डेटा होगा।
ट्यूनिंग प्राइमर हालांकि कोई जादू की चटनी नहीं है। आपको अभी भी उन सभी चरों के बारे में पढ़ना चाहिए जो इसे बदलने का सुझाव देते हैं।
पढ़ना
मैं वास्तव में mysqlperformanceblog की अनुशंसा करना पसंद करता हूं . यह सभी प्रकार की MySQL से संबंधित युक्तियों के लिए एक बेहतरीन संसाधन है। और यह केवल MySQL ही नहीं है, वे सही हार्डवेयर के बारे में भी बहुत कुछ जानते हैं या AWS आदि के लिए सेटअप की अनुशंसा करते हैं। इन लोगों के पास वर्षों और वर्षों का अनुभव है।
एक और बेहतरीन संसाधन है planet-mysql , बिल्कुल।