O log de consultas lentas do Mysql está ativado, mas não está registrando nada

3

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?

    
por rocketeerbkw 20.10.2010 / 23:04

5 respostas

3

É possível que o mysql esteja logando em uma tabela. Tente executar

select * from mysql.slow_log;
    
por 21.03.2011 / 11:41
2

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.

link

Qual é o seu min_examined_row_limit definido?

    
por 20.10.2010 / 23:43
1

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)

    
por 21.10.2010 / 02:57
0

@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.

    
por 27.10.2010 / 16:39
0

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
    
por 14.06.2014 / 11:02

Tags