MySQL 开启慢查询日志与 mysqldumpslow 分析指南

Noah
Noah
发布时间:2026-10-14 | 2人浏览过
原创

慢查询日志是分析和优化 MySQL 性能的重要工具,它能帮助开发者识别耗时过长或资源消耗巨大的 SQL 语句。本文将指导您如何在配置文件 my.cnf/my.ini 中开启慢查询功能,并演示如何使用 mysqldumpslow 命令高效分析日志内容。

开启慢查询日志配置

要启用慢查询日志,需编辑 MySQL 的配置文件。在 Windows 系统中文件名为 my.ini,Linux 系统通常为 my.cnf。请在文件的 [mysqld] 部分添加以下参数:

log-slow-queries=/var/lib/mysql/slowquery.log
long_query_time=2

第1步:指定日志路径

参数 log-slow-queries 用于定义慢查询日志的存储位置。若为空,MySQL 默认以主机名命名并附加 .log 后缀。建议设置为明确的绝对路径,例如 /var/lib/mysql/slowquery.log,并确保该目录对运行 MySQL 的用户(通常是 mysql)具有写权限。

第2步:设置查询时间阈值

参数 long_query_time 定义了记录查询的时间阈值(单位:秒)。上述示例中的 2 表示仅记录执行时间超过 2 秒的查询。可根据实际业务需求调整此数值。

第3步:可选配置 - 未索引查询记录

如果需要同时记录所有未使用索引的查询(无论执行时间长短),可在配置中加入:

log-queries-not-using-indexes

此选项有助于发现缺少索引或索引未被充分利用的 SQL,对性能优化极具价值。

慢查询日志结构解析

生成的慢查询日志包含详细的查询信息。典型条目结构如下:

# Time: 070927 8:08:52
# User@Host: root[root] @ [192.168.0.20]
# Query_time: 372 Lock_time: 136 Rows_sent: 152 Rows_examined: 263630
select id, name from manager where id in (66,10135);
  • Query_time: 查询执行总时间。
  • Lock_time: 等待锁的时间。
  • Rows_sent: 返回给客户端的行数。
  • Rows_examined: 服务器层检查的数据行数,值越大通常意味着效率越低。

使用 mysqldumpslow 分析日志

当日志文件庞大时,直接阅读效率低下。MySQL 自带的 mysqldumpslow 工具可对日志进行聚合与排序。该工具通常位于 mysql/bin/ 目录下。

mysqldumpslow --help

常用参数说明

  • -s ORDER:排序依据。可选值包括:
    - c:查询次数(count)
    - t:查询时间(time)
    - l:锁定时间(lock time)
    - r:返回行数(rows)
    - 前缀 'a' 表示降序排列,如 'at' 为按查询时间降序。
  • -t NUM:显示前 N 条结果。
  • -g PATTERN:正则匹配过滤,忽略大小写。
  • -v:显示详细模式。

第4步:执行分析命令示例

查询次数最多的 20 条 SQL:

mysqldumpslow -s c -t 20 /var/lib/mysql/slowquery.log

返回记录集最多的 20 条 SQL:

mysqldumpslow -s r -t 20 /var/lib/mysql/slowquery.log

查找含有 "left join" 且最耗时的前 10 条 SQL:

mysqldumpslow -t 10 -s t -g "left join" /var/lib/mysql/slowquery.log

通过这些命令,您可以快速从海量日志中提取出最需要优化的关键 SQL 语句。

总结

开启慢查询日志并定期使用 mysqldumpslow 进行分析,是保障 MySQL 数据库高性能运行的基础手段。通过合理设置阈值和关注关键指标(如 Rows_examined),能够有效定位性能瓶颈。

以上就是 MySQL 开启慢查询日志及利用 mysqldumpslow 进行分析的详细内容,更多关于 MySQL 数据库优化与维护的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表