मैं नीचे रॉलैंडो के उत्तर के पूरक जानकारी के रूप में यह उत्तर प्रदान कर रहा हूं।
इससे पहले कि सर्वर उत्पादन में है
सबसे बड़ी तालिका के आधार पर innodb_buffer_pool_size की गणना करें जो अक्सर MySQL द्वारा उपयोग की जाती हैं। डेटाबेस में उनके आकार के आधार पर सबसे बड़ी तालिकाओं की पहचान करने के लिए आप इस स्क्रिप्ट का उपयोग कर सकते हैं:
select table_schema, table_name, round(data_length/1024/1024,2) as size_mb
from information_schema.tables where table_schema like 'my_database'
order by size_mb desc;
+--------------+-------------------------+---------+
| table_schema | table_name | size_mb |
+--------------+-------------------------+---------+
| heavybidder | user | 522.55|
| heavybidder | bid | 121.52|
| heavybidder | item_for_sale | 10.52|
| heavybidder | account_user | 5.02 |
| heavybidder | txn_log | 4.02 |
| heavybidder | category | 0.02 |
+--------------+-------------------------+---------+
अब जब हम जानते हैं कि हमारे डेटाबेस में कौन-सी तालिकाएँ सबसे बड़ी हैं, तो हमें यह निर्धारित करने की आवश्यकता है कि कौन से सबसे अधिक बार उपयोग किए जाते हैं। ऐसा करने के लिए, मैं जेट प्रोफाइलर (जेपी) जैसे प्रोफाइलिंग प्रोग्राम का उपयोग करके देखूंगा कि किस टेबल को सबसे अधिक एक्सेस किया जा रहा है। जेपी आपको दिखाएगा कि कौन से टेबल सबसे अधिक बार एक्सेस किए जा रहे हैं। यहाँ JP में उस अनुभाग से एक स्क्रीनशॉट है
तो इस बात को ध्यान में रखते हुए, अब मुझे पता है कि उपयोगकर्ता और बोली टेबल लगभग 640MB डिस्क स्थान लेते हैं, वे जेपी के अनुसार बहुत बार उपयोग किए जाते हैं और इसका मतलब है कि MySQL बफर पूल में रॉलेंडो के रूप में अपने अनुक्रमित और डेटा को संग्रहीत करने जा रहा है। उनकी टिप्पणियों में नीचे उल्लेख है।
यह सुनिश्चित करने के लिए कि MySQL के पास मेरे सबसे बड़े और सबसे अधिक उपयोग किए जाने वाले तालिकाओं के लिए डेटा स्टोर करने के लिए पर्याप्त मेमोरी है, मैं फिर 640MB पर innodb_buffer_pool_size को परिभाषित करूंगा।
कुछ अतिरिक्त विचार हैं, लेकिन वे innodb_buffer_pool_size पर लागू नहीं होते हैं।
क्या यह 32 बिट या 64 बिट सिस्टम है? 32Bit सिस्टम में, आप 4GB तक सीमित हैं जब तक आप PAE को सक्रिय नहीं करते हैं। विंडोज में, इसका मतलब है विंडोज एंटरप्राइज या डेटासेंटर एडिशन चलाना।
आपके सिस्टम पर चलने वाली अन्य प्रक्रियाओं को कितनी मेमोरी की आवश्यकता है? एक समर्पित MySQL सर्वर पर, मैं ओएस के लिए 5% और 10% के बीच छोड़ दूंगा। विंडोज में आप मेमोरी उपयोग का विश्लेषण करने के लिए प्रोसेस एक्सप्लोरर का उपयोग कर सकते हैं। लिनक्स में, आपके पास sysstat, free, htop, top और vmstat है।
क्या डेटाबेस केवल इनोडब टेबलों से बना है या इनोडब और माईसैम के मिश्रण से बना है? यदि यह दोनों का मिश्रण है, तो मैं key_cache के लिए एक तरफ मेमोरी सेट कर दूंगा, चर, क्वेरी कैश इत्यादि को मिला दूंगा, बाद में सर्वर के उत्पादन में आने के बाद आप अपने MyISAM हिट अनुपात की गणना कर सकते हैं।
सर्वर उत्पादन के बाद है
Innodb के लिए वर्तमान हिट अनुपात क्या है?
1 - (innodb_buffer_pool_reads / innodb_buffer_pool_read_requests)।
प्रमुख कैश हिट अनुपात क्या है
1 - (Key_reads / Key_read_requests)
मैं आमतौर पर 100% के करीब अनुपात प्राप्त करने का प्रयास करता हूं।
बफर पूल में आपकी टेबल कितनी अच्छी तरह फिट होती हैं
आप इस लिंक का हवाला देकर यह भी देख सकते हैं कि आपका बफर डेटा आपके बफर_पूल में कितना फिट बैठता है, जो यह दर्शाने का एक तरीका प्रदान करता है कि "कितने टेबल दिए गए टेबल (cnt) के लिए बफर पूल में हैं, उनमें से कितने गंदे हैं (गंदे) , और इंडेक्स का कितना प्रतिशत मेमोरी में फिट होता है (fit_pct)। " पेरकोना सर्वर पर ही लागू होता है
http://www.mysqlperformanceblog.com/2010/12/09/how-well-does-your-table-fits-in-innodb-buffer-pool/