2010-02-07 2 views
10

एक डेटाबेस मान लें जिसमें 1 जीबी डेटा और 1 जीबी इंडेक्स डेटा शामिल है।मेमोरी में डेटा प्लस इंडेक्स-डेटा रखना - इनो डीबी बनाम मायिसैम

डिस्क IO को कम करने के लिए और इसलिए प्रदर्शन को अधिकतम करने के लिए मैं माईएसQL को मेमोरी आवंटित करना चाहता हूं ताकि इंडेक्स समेत संपूर्ण डेटासेट को रैम में रखा जा सके (मान लें कि मशीन में बहुतायत में रैम है)।

इनो डीबी पैरामीटर innodb_buffer_pool_size मेमोरी बफर इनो डीबी के आकार को निर्दिष्ट करने के लिए प्रयोग किया जाता है ताकि डेटा और उसके टेबल के इंडेक्स को कैश किया जा सके। (नोट: स्मृति डेटा और अनुक्रमित के लिए प्रयोग किया जाता है।)

MyISAM पैरामीटर key_buffer_size स्मृति बफर MyISAM के आकार निर्दिष्ट करने के लिए प्रयोग किया जाता है इसके टेबल के कैश अनुक्रमित करने के लिए उपयोग करता है। (नोट: स्मृति केवल प्रयोग किया जाता है अनुक्रमित के लिए।)

अगर मैं 2 जीबी डेटाबेस (1 जीबी डेटा और 1 जीबी इंडेक्स) चाहते InnoDB के तहत स्मृति में फिट करने के लिए, मैं बस innodb_buffer_pool_size कॉन्फ़िगर कर होने के लिए 2GB। दो गीगाबाइट डेटा और इंडेक्स दोनों रखेंगे।

हालांकि, MyISAM कुंजी key_buffer_size से 2GB पर सेट करते समय उस स्थान का उपयोग सूचकांक के लिए किया जाएगा, लेकिन डेटा के लिए नहीं।

मेरे प्रश्न हैं:

  • MyISAM के "डेटा बफर आकार" (नहीं सूचकांक डेटा) स्पष्ट रूप से नियोजित जा सकता है?
  • MyISAM डिस्क से तालिका डेटा (अनुक्रमणिका डेटा को छोड़कर) कब पढ़ेगा और यह स्मृति से कब पढ़ेगा?

उत्तर

12
  • कोई MyISAM का कोई सामान्य उद्देश्य डेटा कैश नहीं है। यह the official documentation से "key_buffer_size" विवरण में दर्ज है: This is because MySQL relies on the operating system to perform file system caching for data reads, so you must leave some room for the file system cache.

आधुनिक OSes, विशेष रूप से लिनक्स, बहुत होशियार आभासी स्मृति उप उस पृष्ठ कैश में अक्सर पहुँचा फ़ाइलों रखेंगे हो जाते हैं, तो डिस्क मैं/हे है कामकाजी सेट उपलब्ध स्मृति में फिट बैठता है जब कम से कम रखा।

  • तो अपने दूसरे प्रश्न का उत्तर देने के लिए: कभी नहीं।

यह "oversizing बफ़र" में भी इस तरह के read_buffer_size, read_rnd_buffer_size, sort_buffer_size, join_buffer_size, आदि के रूप में विभिन्न MyISAM चर के लिए के रूप में कुछ गतिशील आवंटित किए जाते हैं, इसलिए बड़ा है हमेशा तेजी से इसका मतलब यह नहीं गिर करने के लिए नहीं महत्वपूर्ण है - और कभी कभी यह धीमा भी हो सकता है - एक बहुत ही रोचक मामले के लिए mysqlperformanceblog पर यह post देखें।

यदि आप पॉज़िक्स प्लेटफॉर्म पर 5.1 पर हैं, तो आप अपने वर्कलोड पर myisam_use_mmap बेंचमार्क करना चाहते हैं, यह मॉलोक() कॉल की मात्रा को कम करके उच्च विवाद मामलों में मदद करना है।

संबंधित मुद्दे