Wordpress Database Slow - devo mudar para o InnoDB?

12

Eu tenho um site WordPress com mais de 10 mil posts, e as coisas começam a ficar muito lentas sempre que adiciono e edito posts. As páginas carregam de forma agradável e rápida para os usuários, juntamente com as listas de administradores, mas é quando ocorrem gravações ou atualizações que o servidor passa a 100% da CPU e leva muito tempo (às vezes mais do que o tempo limite do PHP de 60 anos).

Eu estou pensando que isso provavelmente está relacionado ao bloqueio no nível da tabela do MyISAM, e estou pensando em mudar isso para o InnoDB. Quais são as implicações de fazer isso?

Algumas estatísticas:

select  - per hour ~22k
update  - per hour ~7.6k
set option  - per hour ~7k

Sei que há muitas outras otimizações que posso fazer, mas meus sentimentos são de que isso pode ter o maior impacto.

obrigado

Edit : Eu encontrei um dos principais problemas que causaram a lentidão, foi o YARPP (Yet Another Related Posts Plugin) que estava regenerando o "parentesco" a cada vez, e isso parecia dever-se às tags 2k + que temos. Desativei a opção "considerar tags" e ela acelerou consideravelmente.

Além disso, outros plugins que regeneram coisas podem causar esse tipo de problema, como alguns plugins XML de sitemap.

Portanto, meu problema imediato está resolvido, embora eu ainda gostaria de ouvir uma boa resposta para o InnoDB vs MyISAM for Wordpress!

Adam Heath
fonte

Respostas:

11

Eu realmente mudaria para o InnoDB. O bloqueio de tabela / bloqueio de linha tem sido discutido por muitos. Eu sempre escolheria o InnoDB de mãos dadas. No entanto, há outro motivo profundo para escolher o InnoDB ... CACHING .

Enquanto muitas pessoas se gabam de que o MyISAM é mais rápido para leituras, muitas pessoas esquecem que o muitos cache do MyISAM, que é chamado de cache de chaves (definido por key_buffer_size), apenas armazena em cache as páginas de índice dos arquivos .MYI. Ele nunca armazena em cache as páginas de dados. Possui um máximo oficial de 4 GB em sistemas de 32 bits. O máximo de 8 GB é o máximo para 64 bits.

O InnoDB Buffer Pool armazena em cache os dados e as páginas de índice. Dependendo do servidor que você possui, você pode armazenar em cache até todo o conjunto de dados na RAM. Você pode ajustar o InnoDB para até 80% de RAM e 10% para DB Conenctions e deixar 10% para o sistema operacional. Isso é verdade mesmo para diferentes sistemas operacionais .

Eu recomendei essas coisas para os clientes do Drupal com um sucesso maravilhoso. Também se aplica ao Wordpress . Forneci suporte ao banco de dados para clientes com WordPress. Mesmas melhorias.

Você sempre pode configurar a memória do InnoDB de maneira mais eficaz do que o MyISAM. Sempre existe uma maneira de usar o InnoDB para atender às suas necessidades de desempenho . À medida que seus dados crescem, eles acabam se tornando um requisito .

RolandoMySQLDBA
fonte
6

O InnoDB provavelmente não irá ajudá-lo - o bloqueio no nível de página / linha ajuda a atenuar a disputa, mas não parece que esse é o seu problema.

Há muitas coisas por aí que sugerem que o MyISAM é mais lento que o InnoDB no cenário médio do blog (muito mais leituras do que gravações).

Antes de fazer uma troca, você deve pelo menos fazer o seguinte

  • execute o mysqltuner, que lhe dará alguns conselhos de configuração (não é infalível ou todo o conhecimento)
  • ative o log lento de consultas, deixe-o por um dia ou mais e comece a examinar o log e a EXPLICAR as consultas para ver o que está acontecendo

Por experiência pessoal, descobri que a adição de um índice a um campo não indexado em wp_comments ajudou enormemente em minha situação específica (períodos de comentários agitados, em que 10 pessoas poderiam estar tentando comentar ao mesmo tempo) e é possível que descobrir quais consultas estão sendo executadas lentamente e por que podem levar você a uma melhor compreensão do problema e a uma solução REAL!

anu
fonte