Não sou um administrador de banco de dados, mas estou procurando conselhos sobre como ajustar nosso banco de dados MySQL. É uma pequena loja que está executando o Prestashop e fica atrasada por vários minutos ao salvar alterações em um pacote de produtos. Ou seja, um produto que é composto de 2 ou mais outros produtos.
Acabei de executar o MySQLTuner-Perl e parece estar tudo bem na maior parte, mas há vários pontos sinalizados para revisão.
[!!] Aborted connections: 6.83% (337899/4948004)
[!!] CPanel and Flex system skip-name-resolve should be on
[!!] Joins performed without indexes: 10213707
Suspeito que as 10 milhões de junções realizadas sem índices sejam as prováveis culpadas aqui, mas não tenho certeza do que isso significa ou como deve ser resolvido.
O servidor tem toneladas de memória de sobra, então eu poderia aumentar a alocação de 2 a 3x como um curativo temporário, mas imagino que isso não será resolvido até que eu descubra o problema de indexação. Qualquer conselho ou esclarecimento sobre esses resultados seria muito apreciado.
Recomendo que você exclua o MySQLTuner e esqueça que ele existe. Ele geralmente dá conselhos que não são acionáveis, enganosos ou simplesmente errados. Não recomendo usá-lo.
Eu usaria o log de consultas lentas para descobrir quais consultas estão demorando mais, individualmente ou em conjunto (ou seja, muitas consultas rápidas podem causar muita carga no servidor, assim como algumas consultas caras).
Uma ferramenta gratuita para analisar seu log de consultas lentas e relatar as piores consultas é
pt-query-digest
. Este blog dá uma boa introdução ao uso: https://www.percona.com/blog/identifying-high-load-mysql-slow-query-log-pt-query-digest/Depois de obter a lista das consultas mais custosas, você provavelmente aprenderá que são apenas algumas consultas que estão causando o problema. Talvez seja até mesmo apenas uma consulta, executada com frequência.
Então você pode se concentrar em otimizar essas poucas consultas. Muitas vezes, elas só precisam de um novo índice para ajudá-las a fazer pesquisas ou junções sem escanear a tabela inteira. Você pode gostar da minha apresentação How to Design Indexes, Really ( vídeo ).
Ou talvez uma tabela tenha crescido muito com dados antigos dos quais você não precisa, e a melhor coisa a fazer é truncá-la de vez em quando para começar de novo.