MySQL 慢查询日志配置与解析指南

Oliver
Oliver
发布时间:2026-10-15| 4人浏览过
原创

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 慢查询日志配置与分析的详细操作指南。合理配置并定期分析慢查询日志,是提升数据库性能的关键手段。更多关于数据库调优的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。