MySQL Point-of-View से सख्ती से, मेरे पास सुझाव है कि कैसे MySQLance के लिए डेटा / इंडेक्स की कैशिंग में सुधार किया जाए।
ध्यान रखें कि MySQL के लिए दो प्रमुख Storage Engines हैं
उनके कैशिंग तंत्र अलग हैं। कुछ ऐसा है जिसे आप अपनी पसंद के स्टोरेज इंजन के लिए ट्यून कर सकते हैं।
MyISAM
MyISAM केवल इंडेक्स पेजों को कैश करता है। यह डेटा को कभी कैश नहीं करता है। आप MyISAM तालिकाओं के लिए I / O को बेहतर बनाने के लिए दो काम कर सकते हैं।
MyISAM सुधार # 1
किसी भी MyISAM तालिका जिसमें VARCHAR कॉलम होते हैं, प्रारंभिक डिजाइन को छूने के बिना आंतरिक रूप से CHAR में परिवर्तित हो सकते हैं। मान लीजिए कि आपके पास mydb.mytable नामक एक तालिका है और आप इसके लिए I / O को बेहतर बनाना चाहते हैं, तो इस पर निम्न कार्य करें:
ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;
इससे तालिका का आकार 60% -100% बढ़ जाएगा, लेकिन कुछ और बदले बिना I / O में 20-30% प्रदर्शन वृद्धि होगी । मैंने इसके बारे में DBA StackExchange में पहले लिखा था:
MyISAM सुधार # 2
आपको MyISAM कुंजी कैश (जैसे key_buffer_size द्वारा आकार ) बढ़ाने की आवश्यकता है । कृपया इस क्वेरी को चलाएं:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql','performance_schema')) AA ) A,
(SELECT 2 PowerOf1024) B;
यह आपको आपके वर्तमान डेटासेट के आधार पर आदर्श key_buffer_size दिखाएगा।
InnoDB
InnoDB डेटा और इंडेक्स दोनों को कैश करता है। यदि आपने अपने सभी डेटा को InnoDB में परिवर्तित कर दिया है और वर्तमान में एक सभी InnoDB डेटाबेस से वर्डप्रेस चला रहे हैं, तो आपको अपने InnoDB बफर पूल ( innodb_buffer_pool_size के साथ आकार ) को आकार देने की आवश्यकता है । कृपया इस क्वेरी को चलाएं:
SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;
यह आपको आपके वर्तमान डेटासेट के आधार पर आदर्श key_buffer_size दिखाएगा।
अनुमान
यदि आप प्रोजेक्ट करते हैं कि आप डेटासेट 20 गुना बढ़ाएंगे, तो सिर्फ यह कि यह क्वेरी 20 से क्या सुझाती है। मान लीजिए कि आपका MyISAM डेटासेट 15MB है और 3MB आपके इंडेक्स का योग है। यदि आप अनुमान लगाते हैं कि आपके पास 20 गुना अधिक डेटा होगा, तो key_buffer_size को 60MB पर इस तरह सेट करें /etc/my.cnf:
[mysqld]
key_buffer_size=60M
फिर MySQL पुनः आरंभ करें। यही बात InnoDB Buffer Pool पर लागू होगी।
यदि आपका सभी डेटा InnoDB है, तो आपको अपनी InnoDB अवसंरचना का एक पूर्ण क्लीनअप करने की आवश्यकता है, जिसे मैंने StackOverflow में पोस्ट किया था ।