Configurei o log de consultas lentas para o MySQL 5.7:
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow_query_log.log
long_query_time = 10
log_queries_not_using_indexes = 0
Então, para testá-lo, usei o MySQL Workbench e executei select sleep(12);
e verifiquei que vim /var/log/mysql/slow_query_log.log
mostra essa consulta.
Então eu achei tudo ótimo. No entanto, meu slow_query_log parece funcionar apenas para minhas consultas de teste, select sleep(12);
e não para consultas reais.
Abaixo está um exemplo. Em alguns pontos no meu aplicativo Laravel PHP, eu chamo \DB::enableQueryLog();
e Log::debug(\DB::getQueryLog());
depois de executar uma consulta, e nesses logs vejo consultas extremamente lentas (241 segundos!?), mas nunca as vi no slow_query_log.log
.
array (
'query' => 'select * from `automations` where (`contact_id` = ? and `job_class_name` = ? and `execute_at` = ?) and `automations`.`deleted_at` is null limit 1',
'bindings' =>
array (
0 => 23030,
1 => 'App\\Jobs\\SubscribeToWebinarFollowupEmailSeries',
2 => '2018-12-30 19:13:00',
),
'time' => 241.37,
),
Como posso consertar isso?
PS Eu não acho que minha pergunta seja uma duplicata desta porque nos meus testes o log funciona .
Qual é o valor de
log_output
? Deve ser"FILE"
ou"FILE,TABLE"
.Para essa consulta específica, você tem um índice composto nestes:
(Qualquer ordem serve.)
long_query_time = 10
dificilmente pega nada; Recomendo baixar.Minhas consultas que eu achava que levavam 352 segundos na verdade levavam apenas 0,352 segundos! ?♂️
https://laravel.io/forum/03-04-2014-what-time-format-does-dbgetquerylog-return me mostrou que o Laravel
DB::getQueryLog()
mostra "tempo" como milissegundos (microssegundos multiplicado por 1000), não segundos.Que erro embaraçoso (pobre suposição). Então, preciso editar minha pergunta de recompensa de 500 pontos: https://stackoverflow.com/questions/53469793/e-warning-error-while-sending-stmt-prepare-packet-pid/54374937?noredirect=1#comment95579631_53469793