MyISAM से InnoDB में परिवर्तित करने के साथ सभी पर कोई भी गोच?


11

मैं MyISAM से InnoDB पर जाने के लिए तैयार हूं, लेकिन जानना चाहता हूं कि क्या देखने के लिए चीजों की पूरी सूची थी? उदाहरण के लिए, मैंने किसी भी सूची का उल्लेख नहीं देखा है कि DISABLE KEYSInnoDB टेबल पर चलने पर एक चेतावनी दी जाएगी, इसके लिए मैनुअल पेज को छोड़कर ALTER TABLE। यह उस तरह की बात है जिस पर मुझे धर्मान्तरण करने से पहले जानना आवश्यक है। मैंने सोचा था कि मैं अपने प्रश्नों के साथ ठीक हो जाऊंगा, लेकिन जाहिरा तौर पर नहीं।

जवाबों:


7

यहाँ कुछ गोत्र हैं

स्मृति उपयोग

MyISAM

InnoDB

  • डेटा पेज और इंडेक्स पेज को कैश करता है।
  • एक बफर पूल और एक आकार MySQL 5.5 से पहले
  • 1 या अधिक बफ़र पूल MySQL 5.5 से शुरू होते हैं

यहाँ कुछ प्रश्न हैं जो मैंने पहले लिखे और पोस्ट किए हैं कि कैसे MyISAM Key Cache और InnoDB बफर पूल के लिए उचित आकार चुनें

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

MyISAM

  • पूर्ण अनुक्रमणिका का समर्थन करता है

InnoDB

  • MySQL 5.6 के साथ शुरू, हाँ, लेकिन अभी भी बीटा में (UPDATE: MySQL 5.6 मौजूद है और इसमें FULLTEXT इंडेक्स मौजूद हैं। यदि आप MySQL 5.6 में FULLTEXT इंडेक्सिंग का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आप InnoDB- विशिष्ट-पूर्ण विकल्प का उपयोग कर रहे हैं )।
  • MySQL 5.6 से पहले, इसका मतलब है कि आप MyISAM को InnoDB में नहीं बदल सकते।

MySQL 5.5 और पीछे

यह पता लगाने के लिए कि कौन से MyISAM टेबल में फुलटेक्स्ट इंडेक्स है इस क्वेरी को चलाएं:

select tbl.table_schema,tbl.table_name from
(
    select table_schema,table_name
    from information_schema.tables
    where engine='MyISAM'
    and table_schema NOT IN ('information_schema','mysql')
) tbl
INNER JOIN
(
    select table_schema,table_name
    from information_schema.statistics
    where index_type='FULLTEXT'
) ndx
USING (table_schema,table_name);

जो कुछ भी इस क्वेरी से बाहर आता है, उसे MySQL 5.6 में अपग्रेड करने तक InnoDB में परिवर्तित नहीं किया जा सकता है।

ऑप्टिमाइज़ टेबल

MyISAM

InnoDB


क्वेरी के लिए धन्यवाद, छोटे टाइपो हालांकि: "इंजन" के बजाय "इंगिन"
एंड्रयू

@ रोलैंडम्यूसीडीडीबीए: आप यह जोड़ सकते हैं कि इनोबीडी में स्थानिक सूचकांक नहीं हैं।
ypercube y

2

मुझे लगता है कि सबसे बड़ा गोटा ट्रांसकोडैनल होने के नाते निर्दोष होगा। आप जानना चाहेंगे कि क्या MySQL लाइब्रेरी आपके एप्लिकेशन द्वारा डिफ़ॉल्ट रूप से Auto_commit द्वारा उपयोग की जा रही है या नहीं।

उदाहरण के लिए, पायथन ऑटो कमिट नहीं करता है। इसका मतलब यह है कि यदि कोई एप्लिकेशन कनेक्शन बंद करने से पहले एक पंक्ति सम्मिलित कर रहा था, तो यह कनेक्शन है कि इन्सोडब में परिवर्तन करने के बाद अब सम्मिलित किया जाएगा। उदाहरण के लिए अजगर स्क्रिप्ट को कनेक्शन.कॉम () कहा जाना चाहिए;

अंतर का एक और बिंदु मल्टी रो इंसर्ट या अपडेट के आसपास हो सकता है। एक एकल बहु पंक्ति डालें पर विचार करें

insert into tbl values (...row1...),  (...row2...),  (...rowN....);

विचार करें कि क्या होता है अगर रो 3 पर एक अद्वितीय कुंजी टकराव जैसी किसी प्रकार की त्रुटि हो। MyISAM के साथ पहली दो पंक्तियों को लिखा गया होगा, अन्तर्निहित सभी पंक्तियों को लिखा जा रहा है, ऐसी त्रुटि के बावजूद कुछ भी नहीं लिखा हुआ छोड़ दिया जाएगा।

निर्दोष के साथ आप गतिरोध की दुनिया में प्रवेश करेंगे। ये स्वाभाविक रूप से बुरे नहीं हैं जब तक कि वे किसी भी काम को रोकने के लिए ऐसी आवृत्ति के साथ उत्पन्न नहीं होते हैं। हालाँकि, आपके अनुप्रयोगों को इस तरह से कोडित करने की आवश्यकता होगी, जैसे वे गतिरोधों का अनुमान लगाते हैं और उन्हें उचित रूप से संभालते हैं (जिसका अर्थ है कि केवल पुन: प्रयास करें)।

स्मृति / भंडारण सीमाओं पर विचार करें। Innodb, MyISAM की तुलना में अधिक संसाधन गहन है। यदि आपके पास अपने सभी तालिकाओं को समायोजित करने के लिए अपने बफर पूल को बड़ा रखने के लिए पर्याप्त रैम है तो आप सुनहरे हैं।

बड़ी प्राथमिक कुंजियों वाली तालिकाओं की तलाश करें। इनोडब के क्लस्टरिंग इंडेक्सिंग का अर्थ है कि प्रत्येक माध्यमिक इंडेक्स संबंधित पंक्ति के पीके की एक और प्रतिलिपि रखता है। यदि आपके पास 2 माध्यमिक इंडेक्स हैं जिसका अर्थ है कि प्रत्येक पंक्तियाँ पीके को 3 बार (पीके + प्रत्येक सूचकांक) संग्रहीत किया जाता है। यदि पीके कई स्तंभों और बड़े डेटाटाइप्स (उदाहरण के लिए (एन)) में फैला हुआ है, तो आप देख सकते हैं कि कैसे सूचकांक आवश्यकताओं को जल्दी से निर्दोष के तहत विस्फोट किया जा सकता है।

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