Monitorando a solução para ajudar a corrigir o problema das consultas lentas do MySQL

1

Eu tenho dois servidores: um que executa o Apache e outro apenas para o MySQL. Eu não tenho nenhuma ferramenta de monitoramento instalada em nenhum deles.

De vez em quando, parece que minhas consultas SQL estão sendo muito lentas (consultas que normalmente seriam executadas em 0,3 segundos agora levam 20 segundos). Eu não sei se isso é um problema do MySQL, um problema de CPU ou mesmo de rede, como geralmente acontece quando ninguém está por perto para verificar, então estou procurando uma solução de monitoramento que me ajudaria a identificar a fonte de o problema.

Obrigado.

    
por Victor Stanciu 15.09.2010 / 13:40

7 respostas

3

A primeira coisa a verificar é o seu log de consultas lentas. Você pode ter que configurá-lo, pois não tenho certeza se ele está configurado por padrão em todas as versões do MySQL. A configuração padrão geralmente é registrar todas as consultas que duram mais de 3 segundos.

Pode muito bem ser que você tenha uma consulta específica que seja muito longa e bloqueie as tabelas para muitas outras consultas, isso deve aparecer no log de consultas lentas com muita clareza.

Se este for o caso, os próximos passos são:

  1. execute a consulta por meio EXPLAIN para ver o que o o motor está fazendo
  2. descubra onde a consulta está executar.

Se o seu log de consultas lentas não mostrar nada, então é hora de procurar em outro lugar.

Você pode usar nagios, cacti ou mrtg para monitorar coisas como taxa de transferência de dados em interfaces ethernet, status de interface, transferências de disco etc. Essas ferramentas podem ser facilmente configuradas para fornecer gráficos (cactos, mrtg) ou enviar mensagens de alerta (cactos, nagios) quando determinados limites são excedidos.

    
por 15.09.2010 / 14:00
1

Analisar o log de consultas lentas é uma boa ideia.

Meus guts me dizem que você está usando o mecanismo de armazenamento MyISAM para suas tabelas e de repente há um pico na atividade delete / update / insert combinada com alguns selects de longa duração ... que leva a todos os tipos de coisas funky com MyISAM , enquanto no InnoDB tudo fica estável.

    
por 15.09.2010 / 14:11
1

Embora as recomendações fornecidas por outras pessoas sejam sólidas, o diagnóstico em andamento é feito de maneira melhor usando métodos diferentes do log de consultas lentas. Esta é uma ferramenta melhor usada para monitorar consultas lentas para ajuste como parte da manutenção normal do aplicativo.

Parece que você tem uma consulta em execução que é ineficiente ou simplesmente lida com um grande conjunto de dados. Quando as consultas ficarem lentas, execute show full processlist; e ordene por tempo de execução. Isso deve permitir determinar a consulta que está fazendo com que os outros demorem mais para serem executados.

Se você não tiver uma ferramenta como o mytop instalado, poderá usar esse comando para classificar com base no comprimento de tempo a correr:

mysql -e 'show full processlist;' |sort -n -k 6

Depois de determinar a consulta com falha, você pode considerar o melhor método de solução, seja simplesmente ajustando a consulta, criando um índice ou até mesmo podando o conjunto de dados.

A arquitetura também tem um papel significativo nesse tipo de cenário. As consultas OLAP são melhor realizadas em bancos de dados secundários e não no OLTP .

    
por 15.09.2010 / 16:20
0

Você pode usar o mk-query-digest para analisar os logs do MySQL e agregar-los.
 Também ter uma solução de monitoramento adequada (como o Nagios) irá ajudá-lo muito (com o plugin MySQL).

    
por 15.09.2010 / 13:59
0

Eu usei mytop para obter consultas lentas com muita frequência. Quando nossos webmasters começam a reclamar sobre o desempenho do servidor mysql (virtual), peço-lhes educadamente que venham e acompanhem a saída do mytop juntos. Nós achamos a pergunta culpada muito facilmente assim e de lá você sabe qual pode ser o próximo passo.

    
por 15.09.2010 / 16:52
0

Mytop e os logs de consultas lentas são ótimos lugares para começar. Combinado com uma solução de monitoramento / criação de relatórios / gráficos (excluir conforme o caso) do sistema, como OpenNMS / Nagios / Cacti, você pode começar a ter uma visão melhor do que está acontecendo quando você tem problemas.

Também vale a pena configurar o Apache mod_status para mostrar quais solicitações o Apache está manipulando quando a lentidão ocorre, mas você precisa estar assistindo e ver isso acontecer. A saída disso e também variáveis de tempo de execução do MySQL também podem ser integradas no gráfico OpenNMS para ajudar a melhorar ainda mais essa percepção.

    
por 15.09.2010 / 17:15
0

Ajuste de desempenho

* change parameters in /etc/mysql/my.cnf
      o thread_stack=196K
      o query_cache_limit=2M 
      o query_cache_size=64M

tente isso de acordo com suas necessidades

se as consultas estiverem muito lentas tente (desabilite o lookup reverso do dns)

 skip-name-resolve

se funcionar, você deve considerar verificar a configuração do DNS usando esta opção

    
por 30.11.2010 / 07:20