8GB RAM के लिए सर्वश्रेष्ठ MySQL कैश सेटिंग्स केवल InnoDB (5gb डेटाबेस) का उपयोग करके MySQL सर्वर को समर्पित


20

जब मैं प्रदर्शन के लिए MySQL की स्थापना की बात करता हूं तो मैं बहुत बड़ा नॉब हूं। और ईमानदारी से, मैं MySQL के बाहर हर अंतिम बिट को निचोड़ने के लिए ठीक ट्यूनिंग के बारे में चिंतित नहीं हूं, लेकिन मुझे पता है कि ऐसा करने के लिए सबसे महत्वपूर्ण चीज जो कुछ सर्वोत्तम परिणाम प्रदान करती है वह कैश / बफ़र्स को सही ढंग से सेट कर रही है।

मैंने केवल भंडारण इंजन के रूप में केवल InnoDB का उपयोग करके चीजों को सरल रखने की कोशिश की है। और मेरे पास MySQL के लिए एक समर्पित सर्वर है। इसमें 8 जीबी रैम है, मुझे प्रदर्शन को अधिकतम करने के लिए कैसे आवंटन करना चाहिए? मैं अपने पूरे डेटाबेस को सबसे अच्छे प्रदर्शन के लिए मेमोरी में फिट करने में सक्षम होना चाहता हूं। डेटाबेस 5gb के बारे में है। क्या यह संभव है?

मुझे क्वेरी कैश को कितनी मेमोरी आवंटित करनी चाहिए? InnoDB बफर पूल के लिए कितना? कंप्यूटर के बाकी हिस्सों (यानी गैर MySQL संबंधित प्रक्रियाओं) के लिए कितना? आदि।

चूंकि मैं MyISAM का उपयोग नहीं कर रहा हूं, मुझे वास्तव में कुंजी कैश में बहुत सारी मेमोरी लगाने की आवश्यकता नहीं है?

जवाबों:


25

यह डेटाबेस के बारे में बहुत कुछ जाने बिना कठिन है। कुछ उपकरण हैं जिनसे आपको अवगत होना चाहिए;

स्मृति में पूरे डेटाबेस को संग्रहीत करने के बारे में; डेटाबेस पर परिवर्तन करने वाले कोई भी प्रश्न डिस्क पर लिखे जाने तक खुले रहेंगे। केवल एक चीज जो डिस्क को अड़चन से बचा सकती है, वह एक डिस्क-नियंत्रक है जिसमें राइट कैश है।

मैं चूक से निम्नलिखित बदलावों के साथ शुरू करूंगा:

key_buffer_size = 128M
thread_stack = 128K
thread_cache_size = 8
table_cache = 8192
max_heap_table_size = 256M
query_cache_limit = 4M
query_cache_size = 512M

innodb_buffer_pool_size = 4G 

# This is crucial to avoid checkpointing all the time:
innodb_log_file_size = 512M

# If you have control on who consumes the DB, and you don't use hostnames when you've set up permissions - this can help as well.
skip_name_resolve

फिर मैं देखता हूं कि चीजें कैसे चलती हैं, और ऊपर बताए गए टूल के आउटपुट के आधार पर (अन्य चीजों के अलावा) अलग-अलग चीजों की कोशिश करें। मैं यह भी सुनिश्चित कर सकता हूं कि मुनिन या कैक्टि जैसे एक निगरानी उपकरण के साथ ग्राफ का रुझान , यह देखने के लिए कि मैं वास्तव में किस तरह के कार्यभार के साथ हूं। व्यक्तिगत रूप से, मुझे मुनिन के साथ प्रदान किए गए MySQL-plugins के साथ बहुत अच्छा अनुभव है।


धन्यवाद मैं इसे एक शॉट दूंगा और देखूंगा कि क्या मैं कुछ नया सीख सकता हूं।
बिलकर्मी

@billmalarky serverfault में आपका स्वागत है! :) सवाल को सही करने के लिए याद रखें या ठीक से चिह्नित करें, अगर आपको मिले उत्तर से संतुष्ट हैं।
किवसल

Mysqltuner.pl की सिफारिश करने के लिए +1 !!!
रोलैंडमाइसीडीडीबीए

@Kvisle स्वागत के लिए धन्यवाद! मैं थोड़ी देर के लिए स्टैक्वेरफ़्लो के आसपास रहा हूं (अच्छी तरह से ... कुछ महीने जो है ...) लेकिन मैं सर्वरफॉल्ट के लिए नया हूं। मैं वास्तव में voxel.net के साथ होस्ट करता हूं और उनकी प्रेजेंटेड होस्टिंग (IE सिस्टम सपोर्ट) वास्तव में बहुत अच्छी है, लेकिन मुझे लगा कि बाहर के दृश्य की तलाश करना उचित होगा, इसलिए मैंने इस बारे में उनसे बात करते समय एक पूर्ण टूल की तरह आवाज नहीं दी।
बिलमार्करी

1
@Kvisle इसके अलावा, मैं एक सही उत्तर दूंगा, लेकिन मैं चाहता हूं कि यह एक अच्छा विचार मंथन के लिए थोड़ा स्टू करने के लिए हो।
बिलमर्खी

9

IMHO आपको साथ जाने में सक्षम होना चाहिए

innodb_buffer_pool_size=5G

यह 62.5% रैम होगा जिसमें सर्वर ओएस के लिए पर्याप्त मात्रा में RAM रैम के साथ DB कनेक्शंस के लिए मेमोरी होगी

@kvisle ने mysqltuner.pl का उपयोग करने की सिफारिश की। वह स्क्रिप्ट RAM की मात्रा को जज करने के लिए उत्कृष्ट है जो join_buffer_size, Sort_buffer_size, read_buffer_size और read_rnd_buffer_size को समर्पित करने के लिए समर्पित है। उन 4 बफ़र्स को एक साथ जोड़ा जाता है जिन्हें max_connections से गुणा किया जाता है। यह जवाब स्थिर बफ़र्स (innodb_buffer_pool_size + key_buffer_size) में जोड़ा गया है। संयुक्त रकम बताई गई है। यदि वह संयुक्त राशि 80% RAM से अधिक है, तो यह है कि आपको उन बफर आकारों को कम करना चाहिए। mysqltuner.pl इस संबंध में बहुत मददगार होगा।

चूँकि आप सभी का डेटा InnoDB है, आप key_buffer_size (MyISAM इंडेक्स के लिए कुंजी कैश बफर) बहुत कम कर सकते हैं (मैं 64M सुझाता हूं)।

यहाँ एक पोस्ट है जो मैंने DBA StackExchange में की सिफारिश की आकार की गणना करने के लिए innodb_buffer_pool_nize की

UPDATE 2011-10-15 19:55 EDT

यदि आप जानते हैं कि आपके पास 5GB डेटा होगा, तो मेरी पहली सिफारिश ठीक थी। हालाँकि, मैं एक बात जोड़ना भूल गया:

[mysqld]
innodb_buffer_pool_size=5G
innodb_log_file_size=1280M

लॉग फ़ाइल का आकार इनोबीडी बफर पूल का 25% होना चाहिए

UPDATE 2011-10-16 13:36 EDT

25% नियम दो लॉग फ़ाइलों का उपयोग करने पर सख्ती से आधारित है। हालाँकि कई मल्टीपोड लॉग फ़ाइलों का उपयोग करना संभव है, दो आमतौर पर सबसे अच्छा काम करता है।

अन्य लोगों ने 25% का उपयोग करके व्यक्त किया है

हालांकि, सभी निष्पक्षता में, मूल InnoBase Oy कंपनी के किसी व्यक्ति ने बड़ा InnoDB बफ़र्स पूल होने के कारण 25% नियम का उपयोग नहीं किया

स्वाभाविक रूप से, भारी मात्रा में रैम होने पर 25% नियम काम नहीं कर सकता है। वास्तव में, सबसे बड़ी innodb_log_file_size केवल 2 लॉग फ़ाइलों का उपयोग करने की अनुमति है 2047M, क्योंकि लॉग फ़ाइल का संयुक्त आकार 4 जी (4096M) से कम होना चाहिए

बिंदु में मामले: मेरे नियोक्ता के ग्राहकों में से एक में 192 जीबी रैम के साथ एक डीबी सर्वर है। 48G लॉग फाइल करने का कोई तरीका नहीं है। मैं एक निर्दोष लॉग फ़ाइल, 2047M के लिए अधिकतम फ़ाइल आकार का उपयोग करता हूं। @ मेरे जवाब पर केविस्ले की टिप्पणी केवल यह कहते हुए एक लिंक देती है कि आपको अपने आप को दो लॉग फ़ाइलों तक सीमित नहीं करना है। यदि आपके पास एन लॉग फाइलें हैं, तो वे कुल 4 जी नहीं कर सकते हैं। मेरा 25% नियम सिर्फ एक आदर्श दुनिया में है (DB सर्वर 8GB या उससे कम के साथ)।


धन्यवाद, मैं निश्चित रूप से mysqltuner.pl का उपयोग करूंगा। हालाँकि, मुझे पूछना चाहिए, क्या अभी भी स्क्रिप्ट सही होगी अगर मेरा डेटाबेस अभी खाली है? मेरे पास सभी टेबल और स्कीमा सही तरीके से सेट हैं, लेकिन कोई वास्तविक डेटा नहीं है। मैंने एक उदाहरण के आकार के रूप में 5 जीबी का उपयोग किया था जो कि मैं अपने वर्तमान समर्पित सर्वर पर उपयोग करूंगा (अर्थात, एक बार जब डीबी इससे बड़ा हो जाता है तो मैं बेहतर समर्पित सर्वर पर स्विच करूंगा)। वर्तमान में डेटाबेस खाली है (यह एक नई साइट है जिसे लॉन्च नहीं किया गया है) लेकिन मैं अच्छी तरह से पूर्व-लॉन्चिंग को संभालने के लिए mysql को ट्यून करना चाहता हूं।
बिलमलार्की

मेरा जवाब अपडेट किया !!!
रोलैंडमाइसीडीडीबीए

मैं "इनोबीडी बफर पूल का 25% होना चाहिए" पर टिप्पणी करना चाहता हूं। क्योंकि यह 100% सच नहीं है। अधिक विस्तृत उत्तर के लिए dev.mysql.com/doc/refman/5.0/en/… पढ़ें । प्रदर्शन के अनुसार, यह डिफ़ॉल्ट रूप से आकार को थोड़ा बढ़ाने में बहुत मदद करता है, लेकिन आपको इसे अधिकतम करने की आवश्यकता नहीं है।
13

रोलैंडो, मदद के लिए धन्यवाद। मैंने इस धागे को एक संदर्भ के रूप में बुकमार्क किया है। इसके अलावा, मैं उस mysqltuner स्क्रिप्ट का उपयोग कर रहा हूं।
बिलमलार्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.