Строго говоря, с точки зрения MySQL, у меня есть предложения по улучшению кэширования данных / индексов для экземпляра MySQL.
Имейте в виду, что есть два основных механизма хранения для MySQL
Механизмы их кэширования разные. Есть кое-что, что вы можете сделать, чтобы настроить Storage Engine по вашему выбору.
MyISAM
MyISAM кэширует только индексные страницы. Он никогда не кэширует данные. Вы можете сделать две вещи, чтобы улучшить операции ввода-вывода для таблиц MyISAM.
MyISAM Улучшение № 1
Любая таблица MyISAM, имеющая столбцы VARCHAR, может быть внутренне преобразована в CHAR, не затрагивая первоначальный дизайн. Предположим, у вас есть таблица mydb.mytable, и вы хотите улучшить ввод-вывод для нее, выполните на ней следующее:
ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;
Это увеличит размер таблицы на 60% -100%, но даст увеличение производительности ввода-вывода на 20-30% без каких-либо изменений . Я писал об этом раньше в StackExchange DBA:
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 и в настоящее время используете WordPress из всей базы данных 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 составляет 15 МБ, а 3 МБ - это сумма ваших индексов. Если вы подсчитаете, что у вас будет в 20 раз больше данных, установите key_buffer_size в 60 МБ, например, в /etc/my.cnf:
[mysqld]
key_buffer_size=60M
затем перезапустите MySQL. То же самое относится и к пулу буферов InnoDB.
Если все ваши данные - InnoDB, вам необходимо выполнить полную очистку инфраструктуры InnoDB, которую я разместил в StackOverflow .