A melhor ferramenta de afinação de performance MySQL? [fechado]

Qual é a melhor e mais amigável ferramenta de desempenho para o MySQL? Gostaria de Ajuda para localizar a parte da garrafa da minha armadilha. O problema está nas declarações SQL, nas variáveis de configuração, ou algo mais?

Author: Arne Evertsson, 2008-12-12

3 answers

As más notícias: existem ferramentas GUI para ajudar com isso, mas é um trabalho hábil e abrangente. Então eles não cobrem tudo, é provável que você vai precisar usar coisas de linha de comando/instruções sql etc para ajudar. Só usei as ferramentas da linha de comando. Vou dar um pouco de uma visão geral das coisas que eu sei / usei: Primeiro, precisas de uma boa base de dados. Se o design é ruim, você só pode chegar até certo ponto. Isto inclui a normalização, bem como a utilização de tipos adequados para campos. Vou deixar este ponto aqui, pois acho que é um pouco à parte, e não o que procuras.

Certifique-se de que o Cache da consulta MySQL está configurado e a funcionar e dê-lhe um pouco mais de RAM se puder, e certifique-se de que as suas consultas importantes não estão a fazer nada que impeça a cache mysql. Por exemplo, usar a função NOW() em consultas faz isso - por razões óbvias - agora muda a cada segundo! Você pode, em vez disso, colocar uma data no sql, e usar o tempo para o minuto/hora/dia mais próximo (o maior período que você pode escapar) para permitir que mysql para obter algum benefício caching.

Começar a otimizar as coisas: colocar "explicar" na frente da seleção é a maneira de ver como uma consulta está sendo executada e ideificar como melhorá-la. Aprenda a interpretar o resultado: http://dev.mysql.com/doc/refman/5.0/en/using-explain.html Você muitas vezes será capaz de adicionar novos índices/adicionar colunas aos existentes para melhorar as coisas. Mas você também vai encontrar momentos que as consultas precisam ser reestruturar.

Começar a melhorar o desempenho com o MySQL (assumindo que você já não sabe qual é a consulta problema) é verificar o log - it da consulta lenta para um arquivo Todas as consultas demorando mais do que x segundos.

Visão geral, incluindo a configuração para se já não estiver a registar isto, está aqui: http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html - também descobri que a configuração de long_query_time para 0 por um dia ou mais, para que todas as consultas sejam registadas aqui com o tempo tomado, é uma maneira útil para ter uma idéia de exatamente para onde o desempenho está indo. Mas eu não iria lá imediatamente! E não o deixes ligado, os troncos podem ficar enormes.

Uma vez que você tem alguns dias de registro, eu encontrei mysqlsla (analisador de log lento mysql) a partir daqui: http://hackmysql.com/mysqlsla é uma boa ferramenta.

Ele pode fazer mais do que apenas análise de log de consulta lenta - leia o manual. Mas para explicar o que ele faz para logs lentos: o log de consulta lenta pode conter um monte de data, então pode ser difícil descobrir quais consultas são as mais caras em geral - eg: fator em quantas vezes eles correm e quando duas consultas são realmente o mesmo com um id diferente em uma cláusula onde.

O MySQL sla Faz isto tudo por ti. Ele corre através do log, e pode agrupar consultas que são os mesmos/têm valores diferentes nas cláusulas onde. Ele então apresenta-lhe (por padrão) as 10 melhores consultas em termos de tempo total de execução - que muitas vezes tem algumas surpresas, mas é geralmente o ponto de partida mais produtivo-pegue a consulta mais cara e use explicar sobre ele e veja se você pode melhorá-lo. Algumas consultas demoram muito tempo e não podem ser melhoradas facilmente. Neste caso, você pode obter os dados de outra forma ou, pelo menos, cache-lo em vez? Você pode até descobrir que a alteração do esquema do DB é necessária. Da mesma forma, algumas consultas podem estar no topo da saída mysqlsla porque você executá-los muito (especialmente verdadeiro se long_query_time é definido para 0), mesmo se eles correm muito rápido. Talvez seja altura de adicionar algum caching à tua aplicação?

Http://www.maatkit.org/ também parece promissor-nunca o usou, mas a ferramenta MK-query-profiler deve ser útil para investigar mais profundamente por que as consultas demoram.

Uma coisa completamente separada para olhar também: a página" status " em PHPMYADMIN (ou você pode executar todas as consultas para gerar esta informação ....)- ele destaca coisas que ele acha que pode ser ruim em vermelho, e pode ajudá-lo a ver onde você pode obter benefícios do sistema de alocação recurso. Eu não sei muito sobre isso - minha abordagem sempre foi que se algo é vermelho e parece ruim, para ir e ler sobre ele e decidir se é importante e se eu devo fazer alguma coisa (geralmente significa alocar mais recursos para MySQL mudando configuração).

Recentemente descobri que a execução do programa PROCESSLIST também pode ser útil num servidor que está a sofrer. Enquanto ele só lhe dá informações ao vivo (bem, uma foto ao vivo), ele pode ajudá - lo a ter uma sensação para o que está acontecendo em um dado o tempo, especialmente se você refrescar algumas vezes e observar as mudanças. Localizei recentemente um servidor usando cada conexão mysql disponível para executar uma consulta idêntica usando este método. Claro, estaria no registo de consultas lento, mas esta é uma maneira rápida e óbvia de ver o que se passava.

 74
Author: benlumley, 2009-11-09 23:32:52
Explique - se é seu amigo. Além disso, você deve confiar em uma mistura de ferramentas ad-hoc, testes, e as ferramentas de SO para ver exatamente o que está acontecendo.

Muitas coisas podem ser vistas de forma eficaz quer a partir das ferramentas do SO (bom para determinar se uma situação é de CPU ou de IO), quer das várias variáveis que podem ser vistas no MySQL em si (mostrar variáveis globais, mostrar o estado do motor innodb, etc).

Acho que é muito importante ter um ambiente de teste de desempenho. Obter um banco de dados de tamanho de produção com carga semelhante à produção (usando simulação de carga) rodando em hardware de qualidade de produção em seu laboratório (caro, mas essencial). Depois de ter feito isso, pode ajustar os parâmetros que quiser com toda a segurança, sabendo que, mesmo que derreta todo o servidor, pode reconstruí-lo sem afectar nada. Não faças coisas específicas que as pessoas sugiram a não ser que as tenhas testado no teu ambiente de testes de desempenho e as tenhas encontrado provávelmente. benefico.

Essencialmente, a sintonização de desempenho geralmente olha para três áreas, nesta ordem:

  • estrutura da sua própria base de dados (estrutura da tabela, índices, etc.)
  • perguntas
  • sintonizar os parâmetros do servidor
Os dois primeiros são muitas vezes negligenciados a favor do último, o que pode ajudar, mas só depois dos dois primeiros serem feitos.

Não subestimes a importância de reduzir a quantidade de trabalho que o servidor precisa fazer-usando menores campos, menos linhas, menos colunas, etc, é sempre melhor.

 6
Author: MarkR, 2008-12-13 07:00:31

Eu acheiMONyog para ser uma grande ajuda quando eu tinha um servidor mysql sofredor.

É um sistema baseado na web que analisa o seu sistema 24/7 e lhe dá sugestões decentes para melhores valores das variáveis do sistema, tamanhos de cache, etc...

Ele também tem um recurso incorporado no mysqlsla tipo slow query analyzer.

É pena não ser de graça. enter image description here

MONyog-MySQL Monitor e conselheiro tem uma nova UI que eu adoro, eu gosto destas características principalmente:

  1. encontrar o problema SQL-usando o log lento, o log geral, a lista de processos e através do PROXY
  2. alerta em condições críticas como-o servidor está em baixo, demasiadas ligações, etc..
  3. Monitorize periodicamente o seu próprio resultado da consulta
  4. Monitorização da replicação

    Etc.... lista completa das funcionalidades

 4
Author: Hendrik, 2012-07-03 12:38:13