MySQL慢查询日志配置与排查指南
利用MySQL内置的慢查询日志是诊断数据库性能问题的核心手段。通过调整相关系统变量,可以自动记录执行时间超过阈值的SQL语句,结合专用的日志分析工具或手动解析日志内容,能够有效定位阻塞应用性能的“慢SQL”并进行后续优化。
结果或目标
启用MySQL慢查询日志后,系统会自动捕获执行耗时超出设定标准的SQL请求,并将其写入指定的日志文件中。这将协助开发者或运维人员从海量日志中筛选出需要重点优化的低效查询。
准备条件
- 拥有MySQL服务器的root权限或具有SUPER/PROCESS权限的用户账户。
- 能够访问服务器文件系统以查看日志文件路径。
第1步:检查当前慢查询相关参数
在修改配置前,先确认当前系统的慢查询状态及相关变量值。
入口: MySQL命令行客户端
动作: 执行以下命令查看与查询日志相关的系统变量:
show global variables like '%quer%';
重点关注以下几个关键参数的解释:
slow_query_log:决定是否开启慢查询日志功能。默认值为OFF。long_query_time:慢查询的时间阈值(秒)。只有执行时间超过此值的SQL才会被记录。slow_query_log_file:慢查询日志文件的存储路径和文件名。log_queries_not_using_indexes:是否记录未使用索引的查询。默认为OFF,可设为ON以便发现潜在的性能隐患。
第2步:开启慢查询日志
若日志功能处于关闭状态,需先将其开启。
入口: MySQL命令行
动作: 执行以下SQL动态开启全局慢查询日志:
set global slow_query_log=on;
注意: 使用 set global 设置的参数在MySQL服务重启后会失效。若需永久生效,建议同时修改 my.cnf 或 my.ini 配置文件中的 slow_query_log 项,然后重启服务。
第3步:设置慢查询时间阈值
合理设置阈值是平衡日志体积与分析精度的关键。
入口: MySQL命令行
动作: 执行以下命令设置阈值,例如设置为1秒:
set global long_query_time=1;
参数建议:
- 生产环境: 一般建议设置为
1s。对于高QPS且对延迟敏感的业务,可进一步降低至0.1s以更精细地捕捉轻微的性能抖动。 - 测试/开发环境: 建议设置比生产环境更低的阈值(如
0.5s),以便于及时发现代码引入的效率问题。 - 默认值: MySQL默认阈值为
10s,通常过大而不具备日常监控意义,必须根据业务实际情况手动调整。
第4步:查看与分析慢查询日志
当有SQL执行耗时超过阈值后,它们将被追加记录到日志文件中。
1. 确定日志文件位置
入口: MySQL命令行
动作: 查询日志文件的具体路径:
show global variables like 'slow_query_log_file';
2. 查看日志内容
可以使用文本编辑器或命令行工具(如 cat、tail)直接查看日志文件内容。
日志中会显示具体的慢查询语句及其性能指标。一个典型的日志条目包含以下关键字段:
- Time: 慢查询发生的时间戳。
- Query_time: 该SQL语句执行的总时间。如果该值大于设定的
long_query_time,说明此次查询已被记录。 - Lock_time: SQL等待获取锁所消耗的时间。
- Rows_sent: 查询返回的行数。
- Rows_examined: 语句执行期间从存储引擎读取的数据行数。这是重点优化指标,如果该值远大于
Rows_sent,说明存在大量无效扫描,需优先通过添加索引或优化SQL逻辑进行改进。
其他方式定位慢SQL
原生慢查询日志为纯文本格式,数据量较大时手动阅读较为困难。推荐使用以下专业工具进行分析:
- pt-query-digest: Percona Toolkit提供的工具,能将慢查询日志解析为HTML报告,直观展示Top N慢查询、指纹分析等,是业界首选。
- mysqldumpslow: MySQL自带的小型分析脚本,可对日志中的SQL进行分组统计,适合简单场景。
实时排查技巧:
如果某个SQL正在执行且已导致数据库负载飙升,但尚未达到慢查询记录的阈值(或日志尚未刷新),此时看不到任何语句。建议使用 SHOW PROCESSLIST; 或 SHOW FULL PROCESSLIST; 查看当前正在运行的线程。拥有 PROCESS 权限的用户可以看到所有会话,从而揪出长时间处于 Sending data 或 Locked 状态的异常查询。
总结
以上就是MySQL自带慢日志排查慢查询SQL的详细内容,更多关于MySQL性能调优与SQL排查的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













