Суворо з точки зору MySQL, у мене є пропозиції, як покращити кешування даних / індексів для екземпляра MySQL.
Майте на увазі, що для MySQL є два основних двигуни зберігання даних
Їх механізми кешування різні. Є щось, що ви можете зробити, щоб налаштувати механізм зберігання даних на ваш вибір.
MyISAM
MyISAM кешує лише індексні сторінки. Він ніколи не кешує дані. Щоб покращити введення / виведення для таблиць MyISAM, ви можете зробити дві дії.
Вдосконалення MyISAM №1
Будь-яка таблиця MyISAM, що містить стовпці VARCHAR, може бути внутрішньо перетворена в CHAR, не торкаючись початкової конструкції. Припустимо, у вас є таблиця з назвою mydb.mytable, і ви хочете покращити введення-виведення для неї, виконайте наступне:
ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;
Це збільшить розмір таблиці на 60% -100%, але приведе до 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 і зараз виконуються 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 на 60MB, як це в /etc/my.cnf:
[mysqld]
key_buffer_size=60M
потім перезапустіть MySQL. Те ж саме стосуватиметься буферного басейну InnoDB.
Якщо всі ваші дані є InnoDB, вам потрібно виконати повне очищення інфраструктури InnoDB, яку я розмістив у StackOverflow .