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

❤️作者主页:小虚竹

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

❤️技术活,该赏

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

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

文章目录

  • 问题
  • 解决方案
  • 扩展
    • 慢查询日志失效原因二:未使用索引的 SQL 记录不会写入慢查询日志
    • 慢查询日志失效原因三:慢sql里有锁等待
    • 慢查询日志失效原因四:默认不记录管理类命令的慢sql
    • 慢查询日志失效原因五:min_examined_row_limit为非0
    • 慢查询日志失效原因六:slow log文件句柄发生了变化
    • 慢查询日志失效原因七:从库的复制语句默认不记录
  • 参考

问题

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

解决方案

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

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

Mysql出现问题:慢查询日志失效解决方案_第1张图片
Mysql出现问题:慢查询日志失效解决方案_第2张图片

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

SET GLOBAL long_query_time = 1;

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

扩展

其它可能失效的原因

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

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

show variables like 'log_queries_not_using_indexes';

Mysql出现问题:慢查询日志失效解决方案_第4张图片
查看慢查询日志是否有开启

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

Mysql出现问题:慢查询日志失效解决方案_第5张图片
Mysql出现问题:慢查询日志失效解决方案_第6张图片

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

测试sql
检查student 表的索引:

show index from student;

在这里插入图片描述
执行没有使用索引的sql:

select *
from student
where student_name ='student_name446741'

Mysql出现问题:慢查询日志失效解决方案_第7张图片

慢查询日志中,并没有记录到。

使用索引的 SQL 记录写入慢查询日志:

set global log_queries_not_using_indexes=on;

Mysql出现问题:慢查询日志失效解决方案_第8张图片
再执行慢查询的sql

select *
from student
where student_name ='student_name446741'


没有索引的数据也添加到慢查询日志了。

注: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出现问题:慢查询日志失效解决方案_第9张图片

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

min_examined_row_limit 该参数定义一个SQL所读取的数据行数;
min_examined_row_limit设置为非0值,SQL检查行数未超过该值,也不会记录。
默认值为0
在这里插入图片描述

慢查询日志失效原因六: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 小虚竹)

你可能感兴趣的:(《数据库问题解决方案》,mysql,数据库,sql)