Ściśle z punktu widzenia MySQL mam sugestie, jak poprawić buforowanie danych / indeksów dla instancji MySQL.
Należy pamiętać, że istnieją dwa główne silniki pamięci masowej dla MySQL
Ich mechanizmy buforowania są różne. Jest coś, co możesz zrobić, aby dostroić wybrany silnik pamięci masowej.
MyISAM
MyISAM buforuje tylko strony indeksowe. Nigdy nie buforuje danych. Możesz zrobić dwie rzeczy, aby poprawić I / O dla tabel MyISAM.
Ulepszenie MyISAM # 1
Dowolną tabelę MyISAM, która ma kolumny VARCHAR, można wewnętrznie przekonwertować na CHAR bez dotykania początkowego projektu. Załóżmy, że masz tabelę o nazwie mydb.mytable i chcesz ulepszyć we / wy, wykonaj następujące czynności:
ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;
Zwiększy to rozmiar tabeli o 60% -100%, ale da 20-30% wzrost wydajności we / wy bez zmiany czegokolwiek innego . Pisałem o tym wcześniej w DBA StackExchange:
Ulepszenie MyISAM # 2
Musisz zwiększyć pamięć podręczną kluczy MyISAM (według wielkości key_buffer_size ). Uruchom to zapytanie:
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;
To pokaże ci idealny key_buffer_size w oparciu o twój aktualny zestaw danych.
InnoDB
InnoDB buforuje zarówno dane, jak i indeksy. Jeśli przekonwertowałeś wszystkie swoje dane na InnoDB i obecnie korzystasz z WordPress z bazy danych All InnoDB, musisz zmienić rozmiar puli buforów InnoDB (rozmiar z innodb_buffer_pool_size ). Uruchom to zapytanie:
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;
To pokaże ci idealny key_buffer_size w oparciu o twój aktualny zestaw danych.
Projekcje
Jeśli przewidujesz, że Twój zestaw danych wzrośnie 20 razy, tylko kilka razy to, co zaleca to zapytanie do 20. Załóżmy, że Twój zestaw danych MyISAM ma 15 MB, a 3 MB to suma indeksów. Jeśli szacujesz, że będziesz miał 20 razy więcej danych, ustaw key_buffer_size na 60 MB w następujący sposób w /etc/my.cnf:
[mysqld]
key_buffer_size=60M
następnie ponownie uruchom MySQL. To samo dotyczyłoby puli buforów InnoDB.
Jeśli wszystkie twoje dane to InnoDB, musisz wykonać pełne czyszczenie infrastruktury InnoDB, które opublikowałem w StackOverflow .