MySQL慢日志输出问题及快速解决方法

 更新时间:2025年11月29日 09:17:45   作者:angushine  
文章介绍了MySQL慢日志输出问题的原因和解决方法,慢日志记录了执行时间超过设定阈值的SQL语句,但有时即使查询时间小于阈值,未使用索引的查询也会被记录,感兴趣的朋友跟随小编一起看看吧

最近在使用MySQL慢日志的过程中发现即使慢SQL的时间已经设置为1秒,但是小于1秒的SQL依然被输出到了慢日志文件中,先说原因:启用了 log_queries_not_using_indexes
如果你在配置中开启了

log_queries_not_using_indexes = ON

那么 即使查询执行时间远小于 long_query_time,只要它没走索引,也会被记入慢日志!

解决方法

检查是否启用了该选项:

SHOW VARIABLES LIKE 'log_queries_not_using_indexes';

如果返回 ON,而你不希望记录未使用索引但很快的查询,请关闭它:

SET GLOBAL log_queries_not_using_indexes = OFF;

并在配置文件中确保:

[mysqld]
log_queries_not_using_indexes = 0

变量作用域

如果上面的配置依然无法解决问题,检查long_query_time 设置未全局生效(会话 vs 全局),执行

SHOW SESSION VARIABLES LIKE 'long_query_time';

如果不是1(需要设置的时间),执行

SET GLOBAL long_query_time = 1;

注意:SET GLOBAL 只影响新建立的连接,不影响已有连接。

查询变量值

经过上面的配置后,查询变量是否生效,执行

SHOW GLOBAL VARIABLES LIKE 'long_query_time';
SHOW SESSION VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'log_queries_not_using_indexes';
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'slow_query_log_file';

开启慢日志

1、在线开启

-- 尝试设置日志文件路径(MySQL 8.0 支持动态修改,5.7 可能不支持)
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
-- 记录超过 1 秒的查询
SET GLOBAL long_query_time = 1;
SET GLOBAL slow_query_log = 'ON';

虽然在线开启了,但 MySQL 重启后会恢复默认。要永久生效,需用到下面的方法。
2、修改配置文件,编辑 my.cnf(通常位于 /etc/my.cnf 或 /etc/mysql/my.cnf),需要重启

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 0  # 可选:是否记录未使用索引的查询

修改后无需立即重启(需先执行1、在线开启),但下次启动时会沿用配置。

到此这篇关于解决MySQL慢日志输出问题的文章就介绍到这了,更多相关mysql慢日志输出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL双层游标嵌套循环实现方法

    MySQL双层游标嵌套循环实现方法

    要实现逐行获取数据,需要用到MySQL中的游标,一个游标相当于一个for循环,这里需要用到2个游标,如何在MySQL中实现游标双层循环呢,下面小编给大家分享MySQL双层游标嵌套循环方法,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • MySQL表内连和外连的具体使用

    MySQL表内连和外连的具体使用

    我们在使用MySQL的时候,经常涉及到内连接和外连接的应用,本文就来详细的介绍一下MySQL表内连和外连的具体使用,感兴趣的可以了解一下
    2023-10-10
  • Navicat无法连接MySQL报错1251的解决方案

    Navicat无法连接MySQL报错1251的解决方案

    这篇文章主要为大家详细介绍了Navicat无法连接MySQL报错1251的解决方案,文中解决方法介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-12-12
  • mysql命令行如何操作

    mysql命令行如何操作

    这篇文章主要介绍了mysql命令行如何操作,还为大家分享了mysql添加环境变量的方法,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • MySQL慢查询优化解决问题

    MySQL慢查询优化解决问题

    这篇文章主要介绍了MySQL慢查询优化解决问题,MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句,下文详细介绍慢查询的调优情况,需要的小伙伴可以参考一下
    2022-03-03
  • MySQL使用索引优化性能

    MySQL使用索引优化性能

    这篇文章介绍了MySQL使用索引优化性能的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • MySQL错误代码:1052 Column 'xxx' in field list is ambiguous的原因和解决

    MySQL错误代码:1052 Column 'xxx' in field list is

    今天在工作中写sql语句时遇到了个sql错误,为记录并不再重复出错,下面这篇文章主要给大家介绍了关于MySQL错误代码:1052 Column 'xxx' in field list is ambiguous的原因和解决方法,需要的朋友可以参考下
    2023-04-04
  • Lost connection to MySQL server at ''reading authorization packet'', system error: 0

    Lost connection to MySQL server at ''reading authorization p

    这篇文章主要介绍了Lost connection to MySQL server at 'reading authorization packet', system error: 0错误解决方法,需要的朋友可以参考下
    2014-08-08
  • MySQL 5.7增强版Semisync Replication性能优化

    MySQL 5.7增强版Semisync Replication性能优化

    这篇文章主要介绍了MySQL 5.7增强版Semisync Replication性能优化,本文着重讲解支持发送binlog和接受ack的异步化、支持在事务commit前等待ACK两项内容,需要的朋友可以参考下
    2015-05-05
  • MySQL STORED 生成列(Generated Column) 的使用小结

    MySQL STORED 生成列(Generated Column) 的使用小结

    MySQL 8中的生成列可以解决带函数判断的SQL导致的索引无法使用和性能问题,生成列分为VIRTUAL和STORED,其中STORED列会在插入时计算并存储在磁盘上,可以建索引,非常适合用于复杂的SQL优化,下面就一起来了解一下
    2026-02-02

最新评论