Tuning

Monitorando consultas lentas no MySQL

Posted on abril 6, 2011. Filed under: MySQL, Tuning |

Muitas vezes enfrentamos problemas com desempenho em nossos sites, principalmentes aqueles que recebem muitos acessos. Descobrir onde esta o gargalo é um trabalho um tanto complexo principalmente porquê temos que avaliar uma série de variáveis. (CPU, memória, link, limites no banco de dados, limites no serviço de web, índices, entre outros). Neste post vou focar somente como avaliar problemas com lentidão no MySQL, mais especificamente monitorar consultas lentas. Esse recurso já me ajudou várias vezes a resolver problemas de desempenho. Simples e eficiente.

Para habilitar a monitoração de consultas lentas, basta adicionar as seguintes linhas no arquivo de configuração do MySQL (/etc/my.conf ou /etc/mysql/my.cnf), na seção [mysqld]:

log-slow-queries
long_query_time = 2

A linha log-slow-queries irá habilitar o log de consultas lentas. A linha long_query_time = 2 diz ao mysql considerar consultas lentas aquelas que demorarem mais que 2 segundos para retornar, você pode especificar a quantidade de segundos que quiser.
O valor padrão para essa variável é de 10 segundos. Depedendo da quantidade de acessos ao seu site, o valor de 10 segundos pode ser alto. Em um site com bastantes acessos setei essa variável para 2 segundos.
Cabe você analisar sua situação.

Por padrão, o mysql irá criar o arquivo host_name-slow.log dentro do diretório data do mysql. Caso você queira especificar um caminho para o arquivo de log de consultas lentas que seja diferente do caminho padrão você pode especificar através da diretiva log-slow-queries:

log-slow-queries = [caminho do arquivo de log]

Para finalizar, segue abaixo exemplo de um registro de consulta lenta inserido no arquivo de log:

# Time: 110406 17:00:00
# User@Host: admin[admin] @ usuario.localnet [1.1.1.1]
# Query_time: 9 Lock_time: 0 Rows_sent: 1 Rows_examined: 5643851
select count(*) from backuplog;

O interessante observar nesse log, é o campo Query_time que indica o tempo gasto na consulta (9s) e o campo Time que indica a data/hora da ocorrencia. Logo abaixo segue a consulta que gerou o log — select count(*) from backuplog;

Ler Post Completo | Make a Comment ( 3 so far )

Próximas Entradas »

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: