No início de cada página exibida pelo WordPress, há uma chamada do MySQL para buscar opções:
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';
Como não há índice na autoload
coluna, o MySQL precisa procurar TODAS as linhas.
Também deparei com o comentário desta resposta dizendo que não haveria ganho de desempenho, mesmo que houvesse um índice.
No meu aplicativo, usei muitos valores transitórios para servir como uma substituição de sessão. Eles funcionaram muito bem e eu tenho minhas próprias rotinas de coleta de lixo. Notei que na wp_options
tabela todos os meus valores transitórios (os que começam com _transient_
) têm autoload=no
. Espero que o número de linhas da minha wp_options
tabela aumente à medida que o número de usuários simultâneos aumenta.
Gostaria de saber por que a tabela foi projetada dessa maneira. E devo criar um índice para o meu caso específico?
fonte
autoload
coluna.wp_options.autoload
. Fontes: make.wordpress.org/core/2019/10/15/… ... e ... core.trac.wordpress.org/ticket/24044#comment:87 ... Parabéns ao @DanBUK que propôs esse recurso em 2013.Estou executando 3 blogs WP em uma instância grande do Debian Squeeze e estava investigando por que o mysql estava preso naquele host com 200% de uso da CPU e carga do sistema entre 3 e 6. Observando uma 'lista de processos de exibição' dentro do mysql, entendemos o A tabela wp_option estava envolvida neste problema, então executamos:
Após esta operação, o carregamento do mysql, como mostrado na parte superior, caiu drasticamente para 1% e a média de carregamento da instância agora é de 0,10.
Estamos usando alguns plugins para que possa haver um loop em algum lugar do código, e isso pode ser uma situação específica, mas, no nosso caso, a mudança no desempenho é totalmente surpreendente.
Nossa tabela wp_options possui 347 linhas.
fonte
select *
uma vez por todas. Em vez disso, está consultando cada opção, é por isso que colocar um índice fará uma grande diferença.Enquanto a resposta aceita pelo @fuxia toca em alguns motivos "reivindicados" (muitos dos quais foram reivindicados pelos funcionários da Automattic em vários tickets do Trac, etc.), o motivo subjacente do WordPress Core não incluir um índice para as opções de carregamento automático na tabela é que A Automattic preocupou-se com o impacto negativo no desempenho dos bancos de dados MySQL que ainda estavam usando o mecanismo MyISAM.
wp_options
Especificamente, eles apontaram para o próprio site WordPress.org, sendo um banco de dados muito antigo / complexo, como um exemplo de site cujo desempenho seria prejudicado por esse índice.
Quase todos os outros motivos para não adicionar o índice nos últimos 9 anos (sim, desde 2010 no caso do bilhete Trac nº 14258 e desde 2013 no caso do bilhete Trac nº 24044 ) foram repetidamente provados incorretos por dezenas de membros da Na comunidade WordPress, os funcionários da Automattic envolvidos ignoraram repetidamente vários testes de benchmark independentes e voltaram a mencionar as preocupações do MyISAM.
Felizmente, no final de 2019 com o PHP 7.2 agora a versão "padrão" recomendada pelo WordPress Core, e com o mecanismo InnoDB agora padrão nas versões do MySQL após a 5.5 , e com a pressão contínua de vários desenvolvedores, incluindo o @DanBUK, que permaneceram no assunto por anos , A Automattic finalmente desistiu e decidiu adicionar o índice de carregamento automático a partir do WordPress 5.3+ em novembro de 2019.
Em LittleBizzy, lançamos o primeiro plug-in conhecido que adicionava automaticamente o índice se ele não existisse, que ainda está disponível no GitHub e está sendo baixado regularmente. Observe que você NÃO precisa mais instalar esses plugins na sua pilha do WordPress se estiver executando o WP Core 5.3 + ...
fonte