अगर मैं तुम होते, तो मैं सभी डेटा को InnoDB में बदल देता। टेबल लॉकिंग / पंक्ति लॉकिंग पर लंबे समय से कई लोगों ने चर्चा की है। मैं हमेशा InnoDB हाथ नीचे का चयन करेंगे। हालाँकि, InnoDB ... CACHING चुनने का एक और गहरा कारण है ।
जबकि अधिकांश लोग यह दावा करते हैं कि MyISAM पढ़े जाने के लिए तेज़ है, अधिकांश लोग यह भूल जाते हैं कि MyISAM के लिए कई कैश, जिसे कुंजी कैश (key_buffer_size द्वारा सेट) कहा जाता है, केवल .MYI फ़ाइलों से इंडेक्स पेजों को कैश करता है। यह डेटा पेज को कभी कैश नहीं करता है। 32-बिट सिस्टम में इसकी आधिकारिक अधिकतम 4GB है। 8-बिट 64-बिट के लिए अधिकतम अधिकतम है।
InnoDB बफर पूल डेटा और इंडेक्स पेजों को कैश करता है। आपके पास जो सर्वर है, उसके आधार पर आप रैम में संपूर्ण डेटासेट को कैश कर सकते हैं। आप इनोबीडी को 80% रैम और 10% तक डीबी कन्वेंशन के लिए ट्यून कर सकते हैं, और ओएस के लिए 10% छोड़ सकते हैं। यह अलग-अलग ऑपरेटिंग सिस्टम के लिए भी सही है ।
मैंने ड्रुपल ग्राहकों के लिए इन चीजों की शानदार सफलता की सिफारिश की है। यह Wordpress पर भी लागू होता है । मैंने वर्डप्रेस के साथ ग्राहकों के लिए DB समर्थन प्रदान किया है। एक ही सुधार।
आप हमेशा InnoDB के लिए मेमोरी को अधिक प्रभावी ढंग से कॉन्फ़िगर कर सकते हैं कि आप अधिक MyISAM कर सकते हैं। हमेशा अपनी प्रदर्शन आवश्यकताओं के अनुरूप इनोवीडी को ट्विवेक करने का एक तरीका है । जैसे-जैसे आपका डेटा बढ़ता जाएगा, यह अंततः एक आवश्यकता बन जाएगा ।
अद्यतन 2011-11-21 11:44 ईएसटी
यदि आपका संपूर्ण डेटासेट छोटा है, तो आप mysql शुरू होने के बाद अपने पास मौजूद हर टेबल पर एक सेलेक्ट क्वेरी को निष्पादित कर सकते हैं।
InnoDB और / या MyISAM वाली सभी तालिकाओं के लिए, यह क्वेरी चलाएँ:
SELECT DISTINCT
CONCAT('SELECT ',ndxcollist,' FROM ',
db,'.',tb,' ORDER BY ',ndxcollist,';') SelectQueryToLoadCache
FROM (
SELECT
engine,table_schema db,table_name tb,index_name,
GROUP_CONCAT(column_name ORDER BY seq_in_index) ndxcollist
FROM (
SELECT
B.engine,A.table_schema,A.table_name,
A.index_name,A.column_name,A.seq_in_index
FROM
information_schema.statistics A INNER JOIN
(SELECT engine,table_schema,table_name
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')) B
USING (table_schema,table_name)
WHERE
B.table_schema NOT IN ('information_schema','mysql')
AND A.index_type <> 'FULLTEXT'
ORDER BY
table_schema,table_name,index_name,seq_in_index
) A
GROUP BY
table_schema,table_name,index_name
) AA
ORDER BY
engine DESC,db,tb
;
यह आपके द्वारा चलाने के लिए आवश्यक हर संभव क्वेरी को आउटपुट करेगा जो संदर्भित किए जाने वाले सभी अनुक्रमों को समन करेगा। इस क्वेरी को /root/MakeSelectQueriesToLoad.sql नामक फ़ाइल में रखें। स्क्रिप्ट चलाएँ और आउटपुट /root/SelectQueriesToLoad.sql इकट्ठा करें। अंत में, इसे चलाएं:
mysql -u... -p... -AN < /root/MakeSelectQueriesToLoad.sql > /root/SelectQueriesToLoad.sql
mysql -u... -p... < /root/SelectQueriesToLoad.sql
यह निश्चित रूप से सभी इंडेक्स पेजों को InnoDB बफर पूल और MyISAM कुंजी कैश में लोड करेगा। यदि आपका सारा डेटा InnoDB है, तो दो बदलाव करें:
- के
WHERE engine IN ('InnoDB','MyISAM')
साथ बदलेंWHERE engine='InnoDB'
- के
CONCAT('SELECT ',ndxcollist,' FROM ',
साथ बदलेंCONCAT('SELECT * FROM ',
यह भी अधिक डेटा पृष्ठों को InnoDB बफर पूल में आबाद करेगा।
अंतिम नोट: सुनिश्चित करें कि InnoDB बफर पूल आपके सभी InnoDB डेटा को रखने के लिए पर्याप्त है