MySQL 慢查询日志配置与解析指南
MySQL 慢查询日志记录了响应时间超过阈值的 SQL 语句,是数据库性能优化的重要依据。本文详解如何开启并配置慢查询日志,解释核心参数的作用,并利用内置工具 mysqldumpslow 对日志进行高效分析。
什么是慢查询日志
慢查询日志(Slow Query Log)用于记录运行时间超过指定阈值(long_query_time)的 SQL 语句。默认情况下,该功能处于关闭状态,因为开启后会带来一定的系统开销。慢查询日志支持将数据写入文本文件或数据库专用表(mysql.slow_log),用户可根据实际需求选择存储方式。
核心参数说明
配置慢查询日志主要涉及以下系统变量:
slow_query_log:控制开关,1 为开启,0 为关闭。slow_query_log_file:指定日志文件的存放路径(新版 MySQL 使用此参数,旧版常为log-slow-queries)。long_query_time:时间阈值,默认值为 10 秒。从 MySQL 5.1 开始支持微秒级记录,仅记录大于该值而非等于的语句。log_output:指定存储格式,可选'FILE'(文件)、'TABLE'(表)或两者同时启用('FILE,TABLE')。写入文件通常性能更高。log_queries_not_using_indexes:是否记录未使用索引的查询,建议开启以辅助索引优化。log_slow_admin_statements:是否记录管理语句(如ANALYZE TABLE)。
动态配置与永久生效
通过命令行修改变量可立即生效,但重启后失效。若要永久生效,需修改配置文件 my.cnf 或 my.ini。
第 1 步:在线查看当前状态
确认当前慢查询日志是否开启及路径设置:
mysql> show variables like '%slow_query_log%';
+---------------------+------------------------------------------+
| Variable_name | Value |
+---------------------+------------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /usr/local/mysql/data/localhost-slow.log |
+---------------------+------------------------------------------+
2 rows in set (0.00 sec)
第 2 步:临时开启日志
执行以下命令开启全局慢查询日志:
mysql> set global slow_query_log=1;
再次检查变量状态,确认已变为 ON。注意:使用 set global 修改后,当前会话可能仍显示旧值,需新开连接或使用 show global variables 查看。
第 3 步:修改时间阈值验证会话差异
例如将阈值设为 4 秒:
mysql> set global long_query_time=4;
Query OK, 0 rows affected (0.00 sec)
-- 在当前会话直接查询可能仍显示旧值
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
-- 使用 global 关键字查看实际全局值
mysql> show global variables like 'long_query_time';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 4.000000 |
+-----------------+----------+
1 row in set (0.00 sec)
第 4 步:配置永久生效
在 my.cnf 中添加或修改如下参数,随后重启 MySQL 服务:
slow_query_log =1
slow_query_log_file=/usr/local/mysql/data/localhost-slow.log
long_query_time = 4
log_output = 'FILE'
日志分析工具 mysqldumpslow
手工分析日志效率低下,推荐使用 MySQL 自带的 mysqldumpslow 工具。该工具能够聚合相似查询,按不同维度排序统计。
常用参数说明
-s ORDER:排序方式。包括c(次数)、t(时间)、r(返回记录)、l(锁定时间)及对应的平均值al、ar、at。默认按平均查询时间at排序。-t NUM:显示前 N 条结果。-g PATTERN:正则过滤,只匹配包含特定字符串的 SQL。-v:详细模式,显示原始 SQL 而非抽象化后的结果。
典型应用场景
找出返回记录最多的 Top 10 SQL
mysqldumpslow -s r -t 10 /path/to/slow-log-file
找出访问次数最多的 Top 10 SQL
mysqldumpslow -s c -t 10 /path/to/slow-log-file
查找含有特定语法(如 Left Join)且耗时的 SQL
mysqldumpslow -s t -t 10 -g "left join" /path/to/slow-log-file
对于输出较长的情况,建议配合管道符和 more 命令浏览:mysqldumpslow -s r -t 20 /path/to/slow-log-file | more
注意事项与排错
- 权限要求:启动慢查询日志通常需要 MySQL 的服务账号权限(如 root 或有 FILE 权限的用户)。
- 磁盘空间:频繁查询且日志量巨大时,请注意监控日志文件所在的分区容量,避免写满磁盘导致数据库故障。
- 性能影响:虽然现代版本优化良好,但在极高并发场景下,开启日志仍会增加 I/O 负担。若只需偶尔排查,可在压测或业务高峰时段手动开启,结束后关闭。
以上就是 MySQL 慢查询日志配置与分析的详细操作指南。合理配置并定期分析慢查询日志,是提升数据库性能的关键手段。更多关于数据库调优的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









