MySQL慢查询日志详解与配置优化指南
时间:2026-08-16 | 作者:星际追番人 | 阅读:0慢查询日志,顾名思义,就是专门记录那些在 MySQL 里执行时间超过设定阈值的查询语句。
借助这份日志,很容易把执行效率偏低的 SQL 找出来,后续优化也就有了明确抓手。
说得更直白一点,MySQL 的慢查询日志既是排查 SQL 问题的重要依据,也是观察当前 MySQL 性能状态的一个关键功能。
不过也要注意,如果当前并没有调优需求,通常不建议一直开启这个参数。原因很简单:慢查询日志一旦开启,多少都会带来一定的性能开销。
默认情况下,慢查询日志是关闭的。是否已经开启,可以通过下面的命令查看。命令和执行过程如下:
mysql> SHOW VARIABLES LIKE 'slow_query%'; +---------------------+---------------------------------------------------------------------+ | Variable_name | Value | +---------------------+---------------------------------------------------------------------+ | slow_query_log | OFF | | slow_query_log_file | C:ProgramDataMySQLMySQL Server 5.7DataLAPTOP-UHQ6V8KP-slow.log | +---------------------+---------------------------------------------------------------------+ 2 rows in set, 1 warning (0.02 sec) mysql> SHOW VARIABLES LIKE 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set, 1 warning (0.01 sec)
参数说明
- slow_query_log:表示慢查询是否处于开启状态
- slow_query_log_file:表示慢查询日志的存放位置(一般会放在 MySQL 的数据目录中)
- long_query_time:表示查询超过多少秒后才会被记录
启动和设置慢查询日志
可以通过 log-slow-queries 选项来开启慢查询日志,再通过 long_query_time 选项设置时间阈值,单位是秒。
只要查询耗时超过这个设定值,对应的 SQL 语句就会被写入慢查询日志。
通常做法是把 log_slow_queries 选项和 long_query_time 选项加到配置文件的 [mysqld] 组中,格式如下:
[mysqld]
log-slow-queries=dirfilename
long_query_time=n
参数含义
- dir 参数指定慢查询日志的存储路径,如果不指定存储路径,慢查询日志将默认存储到 MySQL 数据库的数据文件夹下。
- filename 参数指定日志的文件名,生成日志文件的完整名称为 filename-slow.log。 如果不指定文件名,默认文件名为 hostname-slow.log,hostname 是 MySQL 服务器的主机名。
- “n”参数是设定的时间值,该值的单位是秒。如果不设置 long_query_time 选项,默认时间为 10 秒。
还可以通过以下命令启动慢查询日志、设置指定时间:
SET GLOBAL slow_query_log=ON/OFF;
SET GLOBAL long_query_time=n;
查看慢查询日志
如果你想查看哪些查询语句的执行效率低,可以从慢查询日志中获得信息。
和错误日志、查询日志一样,慢查询日志也是以文本文件的形式存储的,可以使用普通的文本文件查看工具来查看。
例 1
开启 MySQL 慢查询日志功能,并设置时间,命令和执行过程如下:
mysql> SET GLOBAL slow_query_log=ON; Query OK, 0 rows affected (0.05 sec) mysql> SET GLOBAL long_query_time=0.001; Query OK, 0 rows affected (0.00 sec)
由于需要演示,这里我们将时间设置为了 0.001 秒。
执行时间超过 0.001 秒的 SQL 语句将被记录到日志中。
查询 tb_student 表中的数据,SQL 语句和执行过程如下:
mysql> USE test; Database changed mysql> SELECT * FROM tb_student; +----+--------+ | id | name | +----+--------+ | 1 | Ja va | | 2 | MySQL | | 3 | Python | +----+--------+ 3 rows in set (0.08 sec)
相应的,慢查询日志的部分内容如下:
# Time: 2020-06-01T01:59:18.368780Z # User@Host: root[root] @ localhost [::1] Id: 3 # Query_time: 0.006281 Lock_time: 0.000755 Rows_sent: 2 Rows_examined: 1034 use test; SET timestamp=1590976758; SHOW VARIABLES LIKE 'slow_query%';
删除慢查询日志
慢查询日志的删除方法与通用日志的删除方法是一样的。
可以使用 mysqladmin 命令来删除,也可以使用手工方式来删除。mysqladmin 命令的语法如下:
mysqladmin -uroot -p flush-logs
执行该命令后,命令行会提示输入密码。
输入正确密码后,将执行删除操作。新的慢查询日志会直接覆盖旧的查询日志,不需要再手动删除。
数据库管理员也可以手工删除慢查询日志,删除之后需要重新启动 MySQL 服务。
这里有个细节很容易被忽略:通用查询日志和慢查询日志用的是同一条命令。
也正因为如此,这个命令一旦执行,通用查询日志和慢查询日志都会切换到新的日志文件里,后续内容只会写入新文件。
要是还需要保留旧的慢查询日志,正确做法是先把旧日志文件改名,然后再重启 MySQL 服务,或者执行 mysqladmin 命令。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 以下哪种食材被称为“地下苹果” 蚂蚁庄园今日答案9.18
- 时间:2026-09-17
-
- 蚂蚁庄园今天答题答案2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园答题今日答案2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园小课堂2026年9月18日最新题目答案
- 时间:2026-09-17
-
- 小鸡答题今天的答案是什么2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园每日答题答案2026年9月18日
- 时间:2026-09-17
-
- 蔬菜洗完掉色,说明是被染色了,是真的吗 蚂蚁庄园今日答案9月18日
- 时间:2026-09-17
-
- 满襟蜡绘花纹巧染就花纹当绣裳说的是哪种传统技艺 蚂蚁新村今日答案2026.9.17
- 时间:2026-09-17
