Estritamente do ponto de vista do MySQL, tenho sugestões sobre como melhorar o cache de dados / índices para uma instância do MySQL.
Lembre-se de que existem dois principais mecanismos de armazenamento para MySQL
Seus mecanismos de armazenamento em cache são diferentes. Há algo que você pode fazer para ajustar o mecanismo de armazenamento de sua escolha.
MyISAM
O MyISAM apenas armazena em cache as páginas de índice. Ele nunca armazena em cache os dados. Você pode fazer duas coisas para melhorar a E / S para tabelas MyISAM.
Melhoria MyISAM # 1
Qualquer tabela MyISAM que possui colunas VARCHAR pode ser convertida internamente em CHAR sem tocar no design inicial. Suponha que você tenha uma tabela chamada mydb.mytable e deseje melhorar a E / S para ela, execute o seguinte:
ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;
Isso aumentará o tamanho da tabela de 60% a 100%, mas trará um aumento de 20 a 30% no desempenho de E / S sem alterar mais nada . Eu escrevi sobre isso antes no DBA StackExchange:
Melhoria MyISAM # 2
Você precisa aumentar o cache de chaves do MyISAM (conforme o tamanho de key_buffer_size ). Execute esta consulta, por favor:
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;
Isso mostrará o key_buffer_size ideal com base no seu conjunto de dados atual.
InnoDB
O InnoDB armazena em cache dados e índices. Se você converteu todos os seus dados para o InnoDB e atualmente está executando o WordPress a partir de um banco de dados totalmente do InnoDB, é necessário dimensionar seu buffer pool do InnoDB (dimensionado com innodb_buffer_pool_size ). Execute esta consulta, por favor:
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;
Isso mostrará o key_buffer_size ideal com base no seu conjunto de dados atual.
Projeções
Se você projetar que seu conjunto de dados crescerá 20 vezes mais, basta multiplicar por 20 o que esta consulta recomenda. Suponha que seu conjunto de dados MyISAM tenha 15 MB e 3 MB seja a soma dos seus índices. Se você estima que terá 20 vezes mais dados, defina o tamanho_chave_chave_chave para 60 MB como este em /etc/my.cnf:
[mysqld]
key_buffer_size=60M
depois reinicie o MySQL. O mesmo se aplica ao pool de buffers do InnoDB.
Se todos os seus dados forem do InnoDB, você precisará executar uma Limpeza completa da sua infraestrutura do InnoDB que publiquei no StackOverflow .