É possível que o mysql esteja logando em uma tabela. Tente executar
select * from mysql.slow_log;
Corrida:
Ubuntu Server 10.04
Mysql 5.1.41
Eu tenho o seguinte em /etc/mysql/my.cnf
slow_query_log = 1
slow_query_log_file = /var/log/mysqld/log-slow-queries.log
long_query_time = 1
arquivo de log deve ser gravável
drwxrwxrwx 2 mysql mysql 4096 2010-10-20 13:41 mysqld
-rwxrwxrwx 1 mysql mysql 0 2010-10-20 13:41 log-slow-queries.log
Nada está aparecendo no log ou na tabela mysql.slow_log. Parece que está ativado
mysql> show variables like '%SLOW%';
+---------------------+--------------------------------------+
| Variable_name | Value |
+---------------------+--------------------------------------+
| log_slow_queries | ON |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /var/log/mysqld/log-slow-queries.log |
+---------------------+--------------------------------------+
4 rows in set (0.00 sec)
Isso significa que não tenho consultas lentas? Eu tentei executar select sleep(3);
, mas isso não aparece.
Existe alguma consulta que eu possa executar e que apareça no log se tudo estiver configurado corretamente?
É possível que o mysql esteja logando em uma tabela. Tente executar
select * from mysql.slow_log;
The slow query log consists of all SQL statements that took more than long_query_time seconds to execute and (as of MySQL 5.1.21) required at least min_examined_row_limit rows to be examined.
Qual é o seu min_examined_row_limit
definido?
A maneira mais fácil de criar uma consulta demorada é usar uma união cartesiana em tabelas suficientes para causar uma grande confusão. Crie uma tabela de teste (ou localize uma existente) contendo cerca de 50 entradas. Então corra
SELECT t4.* FROM testtable t1, testtable t2, testtable t3, testtable t4, testtable t5 limit 312499999,1;
que permanecerá por um longo período, depois imprimirá um registro da tabela de testes e uma mensagem como "1 linha no set (1 min 31.45 seg)". O limite / deslocamento é forçar o servidor a calcular as primeiras 312499999 linhas, mas mostrar apenas uma linha em vez de todas as 312500000 linhas (50 ^ 5) porque provavelmente levaria alguns dias para imprimir essas linhas de dados. / p>
Se você não tiver exatamente 50 linhas, defina o deslocamento como count (*) ^ (number of joins) -1. Não faça isso em um servidor que esteja sendo usado ativamente (ou use um número menor de linhas para que acabe em alguns segundos, em vez de ocupar o servidor por um minuto e meio)
@David, ele registra em tempo real, mas não inclui tempo para pegar os bloqueios de tabela.
Como @Bryan apontou, a consulta precisa examinar determinado número de linhas para ser registrada. Eu acho que é por isso que o sono (3) não foi registrado.
A configuração parece correta. Você "ls" o arquivo correto? Eu vi que você tem um "mysqld" no mesmo diretório que "/var/log/mysqld/log-slow-queries.log". By the way, o arquivo de log não deve ter permissão como "777":)
Estou interessado em ver como o problema é resolvido.
Eu tive o mesmo problema. Resolvido depois de ler isto: link
Para ativar o registro de consultas lentas, primeiro é necessário ativar o registro geral.
Basta definir "general_log" para "ON" (em my.cnf)
general_log = 1
Tags mysql