Identificando consultas lentas no MySQL (slow-queries)

O MySQL pode geralmente causar grandes problemas num servidor quando existem consultas que abusam do sistema.

Neste artigo ensinaremos a você como identificar corretamente as consultas (queries) que estão causando problemas para o servidor.

O servidor MySQL pode escrever um log contendo as consultas que demoram mais que “X” segundos. Porém, por padrão este recurso vem desabilitado.

Vamos ver como habilitar o recurso:

1. Log no seu servidor como root
2. Abra o arquivo my.cnf:

pico /etc/my.cnf

3. Dentro da seção [mysqld] adicione as seguintes linhas

log-slow-queries = /var/log/mysql-slow.log
long_query_time = 3

Isto é apenas um exemplo. Você pode usar qualquer nome de arquivo para o log. Você também pode estipular o tempo máximo de uma consulta. A partir deste tempo,a consulta será gravada. No nosso exemplo, colocamos 3 segundos.

4. Após as alterações, salve o arquivo.

No pico, faça: CTRL+X e YES

5. Agora nós temos que criar o arquivo de log.

touch /var/log/mysql-slow.log

6. Agora vamos mudar o dono do arquivo, para que o mysql tenha permissão de escrever nele.

chown mysql.root /var/log/mysql-slow.log

7. E então, reiniciamos o mysql

service mysql restart

O serviço deverá reiniciar corretamente. Caso não reinicie, veja se você fez tudo corretamente no arquivo my.cnf.

8. Aguarde alguns minutos e então examine o conteúdo do arquivo de log que foi criado.

Um exemplo de como fazer isto:

cat /var/log/mysql-slow.log
tail /var/log/mysql-slow.log
tail -50 /var/log/mysql-slow.log

Depois de identifica a consulta, otimize ou elimine ela.

Depois que identificar o problema, é recomendado que você remova a entrada referente a slow-queries no my.cnf (ou comente ela). Isto é importante, pois o uso de slow-queries degrada a performance do mysql. Você pode comentar o arquivo my.cnf:

#log-slow-queries = /var/log/mysql-slow.log
#long_query_time = 3

Não se esqueça de reiniciar o MySQL em seguida.

service mysql restart

Listando bancos mysql, usuário e senha dos domínios no plesk

Para usar este tutorial, use os scripts de linha de comando do plesk, na pasta: %plesk_bin%

Para revelar o banco de dados mysql, usuário e senha de todos os domínios do servidor com um único comando, faça:

dbclient.exe --direct-sql --sql="SELECT db_users.*, data_bases.name, domains.name, data_bases.type FROM db_users INNER JOIN (domains INNER JOIN data_bases ON domains.id = data_bases.dom_id) ON db_users.db_id = data_bases.id WHERE (((data_bases.type)='MySql'))"

Como resetar a senha do mysql no Windows Server?

1. Pare o serviço MySql

2. Execute:

C:\mysql\bin\mysqld-nt --skip-grant-tables

e então abra outro prompt de comando.

3. Execute

C:\mysql\mysql

4. Digite o seguinte comando:

update mysql.user set password=('COLOQUE-SUA_SENHA-AQUI') where User='root';

5. Em seguida, dê o seguinte comando:

flush privileges;

6. Digite:

quit

7. Mate todos os processos mysqld-nt

8. Reinicie o serviço mysql

instalando mytop

O Comando top no linux, mostra os processos que estão sendo executados no servidor, e sem duvida é um dos comandos mais utilizados por administradores linux, porém através do top fica mais dificil saber alguns detalhes importantes do MySQL.

Para este fim temos o MyTop que irá nos permitir mostrar os processos que estão sendo executados, ordenar por uso de memória, uso de cpu, tempo, etc .

Abaixo, vou abordar a instalação do MyTop incluindo dois módulos Perl necessários para que o Mytop funcione, a seguir segue os principais comandos do Mytop.

1 – Instalando os módulos perl

Instalando o TermReadKey:

cd /usr/local/src
wget http://search.cpan.org/CPAN/authors/id/J/JS/JSTOWE/TermReadKey-2.30.tar.gz
tar -zxf TermReadKey-2.30.tar.gz
cd TermRead*
perl Makefile.PL
make test
make
make install
cd ..

Instalando DBI:

wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.48.tar.gz
tar -zxf DBI-1.48.tar.gz
cd DBI*
perl Makefile.PL
make test
make
make install
cd ..

Finalmente, instalando o Mytop

wget http://jeremy.zawodny.com/mysql/mytop/mytop-1.4.tar.gz
tar -zxf mytop-1.4.tar.gz
cd mytop*
perl Makefile.PL
make test
make
make install

Para executar :

mytop

Atalho

* ? Exibe ajuda
– d Exibe as conexoes a uma determinada base de dados
– f Mostra a constra completa de uma específico ID de processo (ativo)
– F Desabilita todos os filtros (host, user, e db).
– h Exibe apenas as consultas de um determinado host
– I Exibe o status do InnoDB
– k “Klila”(mata) um processo
– m Muda o modo de exiição de top para qps (Queries Per Second Mode). Desta forma será exibido na tela a quantidade de querys por segundo.
– o Inverte a ordem default de ordenação
-p Pausa a exibição
– q Sair do mytop
– r Reseta os contadores de “status” do servidor via comando
– s Muda o tempo de atualização dos refreshes (em segundos)
– u Mostra os porcessos de um determinado usuário

Germano P Ferreira
Administrador Linux