2010-03-21 13 views
7

में एक MySQL innodb डेटाबेस लोड करें मेरे पास एक कमांड द्वारा दिखाए गए 1.9 जीबी पर एक MySQL innodb डेटाबेस है।मेमोरी

SELECT table_schema "Data Base Name" 
    , sum(data_length + index_length)/1 048 576 
     as "Data Base Size in MB" 
    , sum(data_free)/ 1 048 576 
     as "Free Space in MB" 
FROM information_schema.TABLES 
GROUP BY table_schema ; 

+--------------------+----------------------+------------------+ 
| Data Base Name  | Data Base Size in MB | Free Space in MB | 
+--------------------+----------------------+------------------+ 
| database_name  |  1959.73437500 | 31080.00000000 | 

मेरे प्रश्न हैं: अगर मैं 2GB या बड़ा करने के लिए innodb_buffer_pool_size सेट

  1. यह मतलब यह है, पूरे डेटाबेस स्मृति में डिस्क अनुरोध से पढ़ा इतना कम की जरूरत है लोड किया जा सकता?

  2. 31 जीबी का खाली स्थान क्या है?

  3. अधिकतम रैम innodb_buffer_pool_size के 1GB है आवंटित किया जा सकता है, यह जो करने के लिए टेबल निर्दिष्ट करना संभव है, जबकि रखने वाले दूसरे लोग हमेशा डिस्क से पढ़ मेमोरी में लोड?

अग्रिम धन्यवाद।

उत्तर

7
  1. बिल्कुल नहीं। InnoDB बफर पूल को पढ़ने और लिखने के लिए उपयोग किया जाता है। यदि आपकी अधिकांश पहुंच पढ़ी जाती है, तो अधिकतर यदि इसे कैश किया जाएगा और कम डिस्क एक्सेस की आवश्यकता होगी।
  2. यह bug हो सकता है, यह बहुत अच्छी तरह से प्रलेखित नहीं है लेकिन मुझे लगता है कि डेटा_फ्री innodb फ़ाइलों के अंदर उपलब्ध स्थान है (यदि आप इस InnoDB से अधिक लिखते हैं तो डेटा फ़ाइल को बड़ा करना होगा)।
  3. नहीं, लेकिन InnoDB उस डेटा को कैश करेगा जो आप स्वचालित रूप से एक्सेस करते हैं, इसलिए इसका इष्टतम प्रभाव होना चाहिए।

डेटाबेस का उपयोग समाप्त करने के लिए पूरी तरह से करता है, तो आप बेहतर प्रदर्शन की जरूरत है एक कैश परत के रूप में memcached उपयोग करने पर विचार।

2
  1. रैम में इंडेक्स को कैश करने के लिए पर्याप्त मेमोरी रखने और डिस्क पर डेटा छोड़ने के बारे में चिंता करना बेहतर है। डेटाबेस प्रदर्शन को काफी हद तक पीड़ित होता है यदि इंडेक्स को हर बार डिस्क से पढ़ना पड़ता है - बाद में डिस्क से वांछित डेटा को पुनर्प्राप्त करने के ओवरहेड से कहीं अधिक।
  2. इनो डीडी डेटा फ़ाइलों को एक निश्चित आकार पर बनाया गया है, यदि वे पूर्ण हो जाते हैं तो उन्हें स्वत: निर्यात करने के लिए विकल्प (अतिरिक्त फाइलें बनाएं)। आप देख सकते हैं कि प्रति फ़ाइल आकार show variables like 'innodb_data_file_path' के साथ क्या है। रिपोर्ट की गई खाली जगह यह है कि वर्तमान डेटा फ़ाइलों का कितना उपयोग नहीं किया जाता है। आपके मामले में, आपके पास 30gig उपलब्ध छोड़कर, इनडोरबी डेटा फ़ाइलों के 32gigs (सबसे अधिक संभावना) में संग्रहीत 2gigs डेटा मिला है।
  3. क्या कोई कारण है कि आप राम में विशिष्ट तालिकाओं को पिन करने के लिए InnoDB के अपने कैशिंग तर्क को बाईपास करना चाहते हैं? कैश स्वाभाविक रूप से पहले से ही राम में सबसे अधिक उपयोग किए जाने वाले डेटा को बनाए रखेगा, और यदि आप इसे सबसे लोकप्रिय के बजाय कम उपयोग किए गए डेटा को रखने के लिए मजबूर करते हैं तो प्रदर्शन में कोई संदेह नहीं होगा।