我为 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
然后为了测试它,我使用了 MySQL Workbench 并运行select sleep(12);
,然后验证vim /var/log/mysql/slow_query_log.log
显示该查询。
所以我觉得一切都很好。但是,我的 slow_query_log 似乎只适用于我的测试查询select sleep(12);
,而不适用于真实查询。
下面是一个例子。在我的 Laravel PHP 应用程序的某些地方,我调用\DB::enableQueryLog();
然后Log::debug(\DB::getQueryLog());
在运行查询后,在这些日志中我看到非常慢的查询(241 秒!?),但我从未在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,
),
我怎样才能解决这个问题?
PS 我不认为我的问题是这个问题的重复,因为在我的测试中日志记录确实有效。
的价值是
log_output
多少?应该是"FILE"
或"FILE,TABLE"
。对于那个特定的查询,你有这些的复合索引:
(任何顺序都可以。)
long_query_time = 10
几乎什么也抓不到;我建议降低它。我认为需要 352 秒的查询实际上只需要 0.352 秒!?♂️
https://laravel.io/forum/03-04-2014-what-time-format-does-dbgetquerylog-return告诉我 Laravel 的
DB::getQueryLog()
“时间”显示为毫秒(微秒乘以 1000),而不是秒。多么令人尴尬的错误(糟糕的假设)。所以我需要编辑我的 500 分赏金问题:https ://stackoverflow.com/questions/53469793/e-warning-error-while-sending-stmt-prepare-packet-pid/54374937?noredirect=1#comment95579631_53469793