कौन सी तालिकाओं को इनोबीडी में माइग्रेट किया जाना चाहिए या कौन सा होना चाहिए, और कौन सी माईसम होनी चाहिए?


10

शीर्षक के अनुसार: क्या InnoDB में प्रवास के लिए तालिकाओं के उम्मीदवारों की एक त्वरित सूची है? और क्या होना चाहिए MyISAM।

कुछ अतिरिक्त जानकारी

  • साइट में काफी भारी रीड-लोड है, लेकिन टैग और इस तरह के साथ लगभग 10 नोड्स प्रति घंटे सम्मिलित करता है।
  • हम CCK (के रूप में सामान्यीकृत तालिकाओं की एक बड़ी मात्रा) का भारी उपयोग करते हैं content_field%
  • हम अपने सभी ब्लॉकों और पृष्ठों के बारे में भी दृश्यों का उपयोग करते हैं ; लेकिन उनमें से कई कस्टम मॉड्यूल के साथ प्रतिस्थापन के लिए उम्मीदवार हैं (डेटाबेस-प्रश्नों को कम करने और उन प्रश्नों के भारीपन के रूप में)।
  • उपयोगकर्ता सभी गुमनाम हैं; संपादकों और वेबमास्टर्स में कुछ लॉग के अपवाद के साथ।

यह प्रफुल्लित करने वाला है कि पूरे इंटरनेट को पता नहीं है कि वास्तव में इस प्रश्न का उत्तर कैसे दिया जाए। कौन सी ड्रुपल टेबल सबसे ज्यादा लिखती है, और बंद हो जाती है .... कौन जानता है।
जेएम बेकर

जवाबों:


8

तालिका लॉकिंग समस्याओं को रोकने के लिए आपको सभी डेटा को InnoDB में कनवर्ट करना चाहिए। हालाँकि, यहाँ सोचने के लिए कुछ बातें हैं:

पूर्ण अनुक्रमण

वर्तमान में, केवल MyISAM FULLTEXT इंडेक्सिंग का समर्थन करता है। InnoDB के लिए पूर्ण अनुक्रमणिका वर्तमान में MySQL 5.6 के लिए काम कर रही है, लेकिन उत्पादन के लिए तैयार नहीं है । यदि आपके पास कोई Drupal टेबल है जिसमें FULLTEXT इंडेक्स हैं, तो उन्हें इस समय InnoDB में नहीं बदला जा सकता है।

पूर्ण अनुक्रमण पर अद्यतन

MySQL 5.6 अब GA (उत्पादन उपयोग के लिए) है। कृपया InnoDB में FULLTEXT अनुक्रमणिका आज़माएँ।

उन तालिकाओं को खोजने के लिए जिनके पास एक FULLTEXTसूचकांक है, इस क्वेरी को चलाएं:

SELECT table_schema,table_name
FROM information_schema.statistics
WHERE index_type='FULLTEXT';

यदि कोई पंक्तियाँ वापस नहीं आती हैं, तो सभी InnoDB तालिकाओं को अपने दिल की सामग्री में परिवर्तित करें। मैंने केवल Mysql का उपयोग करके सभी MyISAM तालिकाओं को InnoDB में परिवर्तित करने के बारे में एक पुरानी पोस्ट लिखी थी

MySQL प्रतिकृति

यदि आपके पास एक भारी-भरकम वातावरण है, तो यदि आप निम्न कार्य करते हैं, तो रीडिंग MyISAM में तेजी से जा सकती है:

  • सेटअप मास्टर / दास प्रतिकृति
  • एक या अधिक पढ़ें मास्टर के तहत दास पढ़ें
  • --skip-innodbसभी स्लेव पर /etc/my.cnf में जोड़ें (स्लेव में डेटा लोड करने पर तालिकाओं को MyISAM में कनवर्ट करता है)
  • इस आदेश के अनुसार प्रत्येक गुलाम के सभी माईसम टेबल के पंक्ति प्रारूप को FIXED में बदलें: ALTER TABLE tblname ROW_FORMAT=FIXED;
  • मैंने इस पर DBA StackExchange में कुछ पोस्ट किया
  • पुस्तक MySQL डाटाबेस डिजाइन और ट्यूनिंगROW_FORMAT=FIXED 72,73 पृष्ठों पर उपयोग करने की सिफारिश करता है। यह आंतरिक रूप से VARCHAR के सभी क्षेत्रों को CHAR में बदल देगा। यह MyISAM तालिका को बड़ा बना देगा, लेकिन इसके खिलाफ चयन निष्पादित बहुत तेज हो जाएगा। मैं व्यक्तिगत रूप से इस पर ध्यान दे सकता हूं। मेरे पास एक बार एक टेबल थी जो 1.9GB की थी। मैंने प्रारूप बदल दिया ALTER TABLE tblname ROW_FORMAT=FIXED। तालिका 3.7GB तक समाप्त हो गई। इसके खिलाफ चयनों की गति 20-25% तेज थी, बिना किसी और सुधार या परिवर्तन के।

इसके साथ एकमात्र सिरदर्द आपके एप्लिकेशन को अलग-अलग रीड स्लेव से अवगत करा रहा है।

उपसंहार

यदि आप प्रत्येक भंडारण इंजन के अन्य लाभों को देख रहे हैं, तो DBA StackExchange की जाँच करें:


4

चूँकि आपकी वेबसाइट रीड-हैवी साइड पर है, मैं बस सभी टेबल को InnoDB में बदल दूंगा। फिर आप InnoDB बफर पूल और क्वेरी कैश को उचित रूप से पढ़कर प्रदर्शन को अनुकूलित कर सकते हैं। इस तरह, हम अपने Drupal होस्टिंग अवसंरचना में समर्पित डेटाबेस सर्वरों पर प्रति सेकंड कई हजार प्रश्न प्राप्त कर रहे हैं।

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