मैं MySQL के मेमोरी उपयोग को कैसे अनुकूलित करूं?


9

मेरा सेटअप ( उदाहरण )

मैं अमेज़ॅन हाई सीपीयू एक्स्ट्रा लार्ज ईसी 2 इंस्टेंस पर निम्नलिखित स्पेक्स के साथ लिनक्स चला रहा हूं:

  • 7 जीबी मेमोरी
  • 20 EC2 कम्प्यूट यूनिट (2.5 EC2 कंप्यूट यूनिट्स के साथ 8 वर्चुअल कोर)
  • 1690 जीबी का लोकल इंस्टेंस स्टोरेज
  • 64-बिट प्लेटफॉर्म

मेरे पास दो बड़े MySQL डेटाबेस हैं जो MyISAM स्टोरेज इंजन पर चल रहे हैं। एक 2GB का है और दूसरा 500MB का है। मैं यह सुनिश्चित करना चाहूंगा कि MySQL ज्यादा से ज्यादा RAM का उपयोग कर रहा है क्योंकि यह क्वेरी गति को अधिकतम करने की आवश्यकता है। मैं जानता हूँ कि MySQL स्मृति config विकल्पों में से एक गुच्छा देखते हैं चाहते key_buffer_sizeऔर MyISAM_sort_buffer_size,लेकिन मैं इन के अनुकूलन के साथ अपरिचित हूँ।

प्रशन

  1. लिनक्स सिस्टम पर वर्तमान में MySQL किस मेमोरी का उपयोग कर रहा है, इसकी जांच कैसे की जाती है?
  2. MySQL मेमोरी उपयोग को अधिकतम कैसे करें / ऑप्टिमाइज़ करें?
  3. मेरे प्रश्नों और स्कीमा को अनुकूलित करने पर, मुझे अन्य किन परिवर्तनों पर विचार करना चाहिए?

आप htop कार्यक्रम के साथ जाँच कर सकते हैं।
newworld

मेमोरी उपयोग को अधिकतम करने से मेमोरी में पूरा डेटाबेस नहीं होगा। आपके पास

4
रैम-आधारित फाइलसिस्टम असुरक्षित है। यदि सर्वर क्रैश सभी डेटा खो जाएगा
newworld

जवाबों:


7

यह एक कठिन विषय है। यहाँ उत्तर नहीं दिया जा सकता है, पूरे इस बारे में किताबें लिखी गई हैं। मैं आपका innodb_buffer_pool_size बड़ा बनाने की सलाह देता हूं। यदि आप myisam तालिकाओं का उपयोग कर रहे हैं, तो key_buffer_size जांचें। इसके अलावा table_cache और max_connections पर विचार किया जाना चाहिए।

यहाँ कुछ है जो आपकी मदद कर सकता है:

http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ http://www.mysqlperformanceblog.com/2007/11/01/innodb- प्रदर्शन-अनुकूलन-मूल बातें / http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

संपादित करें:

जैसा कि @ drew010 ने कहा है कि DB का किस तरह का उपयोग होता है, इस पर विचार करना महत्वपूर्ण है। एक भारी रीड डीबी के लिए ट्यूनिंग एक भारी लेखन की तुलना में बहुत अलग है। इसके अलावा, आप अन्य रणनीतियों पर विचार कर सकते हैं। जैसे मेमकेच्ड, नोस्कल डेटाबेस इत्यादि।


2
सहमत, वे बहुत छोटे डेटाबेस भी अपेक्षाकृत बोलने वाले हैं। यदि आप एक टन डेटाबेस पढ़ने की पहुंच की उम्मीद कर रहे हैं, तो आप कुछ प्रकार के कैशिंग सिस्टम पर विचार कर सकते हैं जैसे कि मेमेकैच्ड जो डेटाबेस से हिट को कम करने के लिए आपके एप्लिकेशन को डेटाबेस से मूल्यों को स्टोर करने के लिए उपयोग कर सकता है। यदि आप ज्यादातर आवेषण कर रहे हैं, तो डिस्क एक बहुत महत्वपूर्ण कारक होने जा रहा है। कुछ हद तक सवाल इस बात पर निर्भर करता है कि आपके उपयोग के मामले क्या हैं। यदि डेटा बहुत अधिक नहीं बदल रहा है, तो mysql क्वेरी कैश को तेज प्रश्नों के साथ भी बहुत मदद करनी चाहिए। यह भी सुनिश्चित करें कि आपके अनुक्रमित / प्राथमिक कुंजी अच्छे हैं।
drew010

+1 तुम सही हो भाई। मुझे लगता है कि वह बुनियादी ट्यूनिंग के लिए पूछ रहा था, लेकिन डीबी और अन्य चीजों के उपयोग पर विचार करना महत्वपूर्ण है। फिर से, यहाँ चर्चा नहीं की जा सकती, मुझे लगता है।
santiago.basulto

1

यदि आपको यह सुनिश्चित करने की आवश्यकता है कि MySQL सभी आवश्यक मेमोरी का उपयोग करता है, तो आपको InnoDB पर स्विच करना होगा। जब तक आप MySQL FULLTEXTखोज क्षमताओं का उपयोग नहीं करते हैं, तब तक कोई गंभीर समस्या नहीं होगी।

MyISAM के मामले में कई संख्या में कैश का उपयोग किया जाता है, जिसमें आंतरिक MySQL कुंजी बफ़र्स और सिस्टम कैश शामिल हैं। यदि आप सर्वश्रेष्ठ प्रदर्शन चाहते हैं, तो आपको कैश के लिए कमरे से बाहर जाने की आवश्यकता है, लेकिन फिर भी मैं उस उद्देश्य के लिए MyISAM की सिफारिश नहीं करता हूं, खासकर अगर आपके डेटाबेस में भारी-भरकम हो: MyISAM लिखने पर पूरी तालिका को लॉक कर देता है, जबकि InnoDB केवल प्रभावित पंक्तियों को लॉक करता है।

यहां तक ​​कि अगर आप सभी डेटाबेस को स्मृति में रखते हैं, तो आप अभी भी अपर्याप्त सूचकांक या अन्य कारणों से धीमी गति से चलने वाले प्रश्न कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.