Mysql出现问题:慢查询日志失效解决方案(mysql 小虚竹)

举报
小虚竹 发表于 2022/10/05 09:51:06 2022/10/05
【摘要】 问题在线动态设置long_query_time,从10秒设置到了1秒,执行慢sql,没有记录到慢查询日志中。 解决方案查看慢查询日志是否有开启show variables like '%slow_query_log%'; show variables like '%long_query_time%'; 是已经开启的。如果没有开启,请按上文介绍的方式操作,这里不再赘述。慢查询阀值是10s,改...

问题

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

解决方案

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

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

在这里插入图片描述
在这里插入图片描述

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

SET GLOBAL long_query_time = 1;

修改之后,建议重新开一个会话查询(旧会话查询出的值可能是原来的10s)
在这里插入图片描述

扩展

其它可能失效的原因

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

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

show variables like 'log_queries_not_using_indexes';

在这里插入图片描述
查看慢查询日志是否有开启

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

在这里插入图片描述
在这里插入图片描述

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

测试sql
检查student 表的索引:

show index from student;

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

select *
from student
where student_name ='student_name446741'

在这里插入图片描述

慢查询日志中,并没有记录到。
在这里插入图片描述
使用索引的 SQL 记录写入慢查询日志:

set global log_queries_not_using_indexes=on;

在这里插入图片描述
再执行慢查询的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,默认是不记录这一类语句到慢日志。
在这里插入图片描述

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。