MySQL开启慢查询日志排查CPU占用过高

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

在面对MySQL服务器CPU占用异常飙升的问题时,快速定位导致系统负载过高的“元凶”SQL语句是关键。通过开启并配置MySQL慢查询日志,配合专业的日志分析工具,可以有效识别性能瓶颈。本文将详细介绍如何根据MySQL版本配置慢查询日志,以及如何使用工具对日志进行多维度筛选和分析,从而辅助后续的数据库优化工作。

启用慢查询日志

要排查运行缓慢的SQL语句,首先需要确保MySQL开启了慢查询功能。开启方式主要依赖修改MySQL配置文件(通常为 my.cnf),不同版本的MySQL在参数配置上存在差异。

核心配置参数说明:

  • long_query_time:设置慢查询的阈值,单位为秒。超过此时间的SQL会被记录到日志中。
  • slow_query_log_file 或 log-slow-queries:指定慢查询日志文件的存放路径。

第1步:编辑MySQL配置文件

使用文本编辑器打开MySQL配置文件 my.cnf,在 [mysqld] 标签下添加或修改以下配置。

MySQL 5.0 版本配置示例

[mysqld]
long_query_time = 1
log-slow-queries = /var/log/mysql/slow.log

MySQL 5.1+ 版本配置示例

[mysqld]
long_query_time = 1
slow_query_log=1
slow_query_log_file = /var/log/mysql/slow.log

注意:配置完成后,重启MySQL服务使其生效。在生产环境中,建议仅在排查期间开启,并在问题定位后关闭,以避免因频繁写入日志文件而对服务器性能产生额外影响。

分析与处理慢查询日志

待日志积累一定数据后,可以使用MySQL自带的工具 mysqldumpslow 对日志文件进行分析,找出访问频率最高或耗时最长的SQL语句。

第2步:使用 mysqldumpslow 分析日志

假设慢查询日志文件位于 /var/log/mysql/slow.log,我们可以利用该工具的参数进行灵活过滤和排序。

常用参数说明:

  • -s ORDER:指定排序规则。常用的有 t (总时间), c (查询次数), r (返回记录数), l (锁定时间)。字母前加 a 表示倒序排列(如 at 为按总时间倒序)。
  • -t NUM:仅显示结果集中前 N 条最频繁的SQL。
  • -g PATTERN:正则表达式匹配,用于过滤包含特定关键字(如表名、JOIN类型等)的SQL语句。

实操命令示例:

1. 查看执行次数最多的20个SQL:

mysqldumpslow -s c -t 20 /var/log/mysql/slow.log

2. 查看返回记录数最多的20个SQL:

mysqldumpslow -s r -t 20 /var/log/mysql/slow.log

3. 查看包含左连接且执行时间最长的前10个SQL:

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

结论与优化方向

通过分析日志输出,开发者可以明确哪些SQL是系统的性能瓶颈。针对这些“慢查询”,常见的优化手段包括:

  • 检查并完善相关查询表的数据库索引。
  • 优化SQL语句结构,避免全表扫描。
  • 审视应用程序逻辑,减少不必要的数据库交互。

以上就是使用MySQL Slow Log来解决MySQL CPU占用高的详细内容,更多关于MySQL优化的资料请关注本站其它相关文章!

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表