Banco de dados do Wordpress lento - devo mudar para o InnoDB?

10

Eu tenho um site WordPress com mais de 10k posts, e as coisas estão começando a ficar muito lentas sempre que eu estou adicionando e editando postagens. O carregamento de páginas é bom e rápido para os usuários, junto com as listas administrativas de posts, mas é quando as gravações ou atualizações ocorrem, o servidor vai para 100% da CPU e leva muito tempo (às vezes mais do que o intervalo de 60s do PHP).

Estou pensando que isso é provável com o bloqueio no nível de tabela do MyISAM e estou pensando em mudar isso para o InnoDB. Quais são as implicações de se fazer isso?

Algumas estatísticas:

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

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

Obrigado

Editar : Eu encontrei um dos principais problemas que causaram a lentidão, foi YARPP (Yet Another Related Posts Plugin) que estava regenerando o "parentesco" de cada vez, e isso parecia ser devido para as 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 plug-ins de sitemap em XML.

Então, meu problema imediato está resolvido, embora eu ainda adoraria ouvir uma boa resposta ao InnoDB vs MyISAM for Wordpress!

    
por Adam Heath 24.02.2011 / 12:34

2 respostas

10

Eu realmente mudaria para o InnoDB. Bloqueio de tabela / bloqueio de linha tem sido discutido por muitos. Eu sempre escolheria as mãos do InnoDB. No entanto, existe outra razão profunda para escolhendo InnoDB ... CACHING .

Enquanto a maioria das pessoas afirma que o MyISAM é mais rápido para as leituras, a maioria das pessoas esquece que o cache do MyISAM, que é chamado de cache de chaves (definido por key_buffer_size), armazena apenas páginas de índice de arquivos .MYI. Nunca armazena em cache páginas de dados. Tem um máximo oficial de 4 GB em sistemas de 32 bits. O máximo de 8 GB é de 64 bits.

O InnoDB Buffer Pool armazena em cache os dados e páginas de índice. Dependendo do seu servidor, você pode armazenar em cache até o conjunto de dados inteiro na RAM. Você pode ajustar o InnoDB para até 80% de RAM e 10% para as Conções de BD 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 . Eu forneci suporte DB para clientes com WordPress. As mesmas melhorias.

Você sempre pode configurar a memória do InnoDB de forma mais eficaz que você pode mais MyISAM. Há sempre uma maneira de tweek InnoDB atender às suas necessidades de desempenho . À medida que os seus dados aumentam, eventualmente, o tornar-se um requisito .

    
por RolandoMySQLDBA 22.04.2011 / 04:19
5

O InnoDB provavelmente não irá ajudá-lo - o bloqueio no nível de página / linha ajuda a mitigar a contenção, 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 (muitas mais leituras 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 mesmo todo sabido)
  • ative o registro lento de consultas, deixe-o por um dia ou mais e comece a examinar o log e EXPLIQUE as consultas para ver o que está acontecendo

Por experiência pessoal, descobri que adicionar um índice a um campo não indexado em wp_comments ajudava maciçamente em minha situação particular (períodos de comentários em rajadas, onde 10 ou mais pessoas poderiam estar tentando comentar ao mesmo tempo) e é possível que descobrir quais consultas estão sendo executadas lentamente e por que você pode ter uma melhor compreensão do problema e uma solução REAL!

    
por anu 02.03.2011 / 11:23