Mysql出现问题:慢查询日志失效解决方案

时间:2022-10-05 13:55:08

❤️作者主页:小虚竹

❤️作者简介:大家好,我是小虚竹。Java领域优质创作者????,CSDN博客专家????,华为云享专家????,掘金年度人气作者????,阿里云专家博主????

❤️技术活,该赏

❤️点赞 ???? 收藏 ⭐再看,养成习惯

PC端左侧加我微信,进社群,有送书等更多活动!

问题

在线动态设置long_query_time,从10秒设置到了1秒,执行慢sql,没有记录到慢查询日志中。

解决方案

查看慢查询日志是否有开启

show variables like '%slow_query_log%'; 
show variables like '%long_query_time%'; 

Mysql出现问题:慢查询日志失效解决方案
Mysql出现问题:慢查询日志失效解决方案

是已经开启的。如果没有开启,请按上文介绍的方式操作,这里不再赘述。
慢查询阀值是10s,改为1s.

SET GLOBAL long_query_time = 1;

修改之后,建议重新开一个会话查询(旧会话查询出的值可能是原来的10s)
Mysql出现问题:慢查询日志失效解决方案

扩展

其它可能失效的原因

慢查询日志失效原因二:未使用索引的 SQL 记录不会写入慢查询日志

查看设置,默认是关闭的。

show variables like 'log_queries_not_using_indexes';

Mysql出现问题:慢查询日志失效解决方案
查看慢查询日志是否有开启

show variables like '%slow_query_log%'; 
show variables like '%long_query_time%'; 

Mysql出现问题:慢查询日志失效解决方案
Mysql出现问题:慢查询日志失效解决方案

是已经开启的。如果没有开启,请按上文介绍的方式操作,这里不再赘述。

测试sql
检查student 表的索引:

show index from student;

Mysql出现问题:慢查询日志失效解决方案
执行没有使用索引的sql:

select *
from student
where student_name ='student_name446741'

Mysql出现问题:慢查询日志失效解决方案

慢查询日志中,并没有记录到。
Mysql出现问题:慢查询日志失效解决方案
使用索引的 SQL 记录写入慢查询日志:

set global log_queries_not_using_indexes=on;

Mysql出现问题:慢查询日志失效解决方案
再执行慢查询的sql

select *
from student
where student_name ='student_name446741'

Mysql出现问题:慢查询日志失效解决方案
没有索引的数据也添加到慢查询日志了。

注:log_queries_not_using_indexes参数要跟参数log_throttle_queries_not_using_indexes配合使用

log_throttle_queries_not_using_indexes:该参数决定每分钟记录未使用索引的SQL的数量上限,因为未使用索引的SQL可能会非常多,导致慢日志空间增长飞快。

慢查询日志失效原因三:慢sql里有锁等待

慢SQL里有大量锁等待,慢SQL的执行时间不包含锁等待的时间

慢查询日志失效原因四:默认不记录管理类命令的慢sql

log_slow_admin_statements=0,因此alter, create index, analyze table等操作即使超过 long_query_time,也不会记录到慢日志中。
log_slow_admin_statements 该参数决定是否记录管理类的命令,有 ALTER TABLE,ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE,REPAIR TABLE,默认是不记录这一类语句到慢日志。
Mysql出现问题:慢查询日志失效解决方案

慢查询日志失效原因五:min_examined_row_limit为非0

min_examined_row_limit 该参数定义一个SQL所读取的数据行数;
min_examined_row_limit设置为非0值,SQL检查行数未超过该值,也不会记录。
默认值为0
Mysql出现问题:慢查询日志失效解决方案

慢查询日志失效原因六:slow log文件句柄发生了变化

slow log文件钻句柄发生了变化,如运行期间用vim打开log,最后又保存退出,此时文件句柄发生变化,需要执行flush slow logs。

慢查询日志失效原因七:从库的复制语句默认不记录

log_slow_slave_statements:该参数在从库上设置,决定是否记录在复制过程中超过long_query_time的SQL,如果binlog格式是row,则即使开启了该参数,也不会记录相关SQL。
除非binlog格式是statement且开启log_slow_slave_statements。

参考

SQL进阶-查询优化-慢查询日志(SQL 小虚竹)