MySQL慢查询日志怎么看?程序员必备排障指南
2025年Java面试宝典抢先领
链接: https://pan.baidu.com/s/1RUVf75gmDVsg8MQp4yRChg?pwd=9b3g 提取码: 9b3g
🔍 一、什么是MySQL慢查询日志?
慢查询日志(Slow Query Log)是MySQL自带的核心诊断工具。它自动记录执行时间超过指定阈值(long_query_time)的SQL语句,帮我们发现数据库性能瓶颈。面试高频题! 几乎每个后端岗位都会问如何定位慢SQL。
⚙️ 二、开启慢查询日志(3种方式)
-
修改配置文件(永久生效)
在my.cnf(Linux)或my.ini(Windows)中添加:slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 # 超过2秒的SQL会被记录 log_queries_not_using_indexes = 1 # 记录未走索引的查询(强烈建议开启!)
-
动态开启(会话级)
无需重启MySQL,直接在客户端执行:SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; -
容器/Docker环境
通过环境变量传递:docker run -e MYSQL_SLOW_QUERY_LOG=1 -e MYSQL_LONG_QUERY_TIME=0.5 ...
📋 三、关键配置参数解析
| 参数名 | 作用说明 | 推荐值 |
|-----------------------------|-----------------------------------|----------------|
| slow_query_log | 开关慢查询日志 | ON |
| slow_query_log_file | 日志存储路径 | 自定义路径 |
| long_query_time | 慢查询阈值(单位:秒) | 0.5-2秒 |
| log_queries_not_using_indexes | 记录未使用索引的查询 | ON(重要!) |
| min_examined_row_limit | 扫描行数超过此值才记录 | 1000 |
🔎 四、分析慢查询日志(3大工具)
-
原生
mysqldumpslow(命令行)
统计高频慢SQL:# 按总耗时排序 mysqldumpslow -s t /path/to/slow.log # 按出现次数排序 mysqldumpslow -s c /path/to/slow.log -
Percona Toolkit 的
pt-query-digest
更强大的分析工具,输出优化建议:pt-query-digest /var/log/mysql/slow.log > slow_report.txt报告包含:SQL执行时间分布、锁等待时间、扫描行数等关键指标。
-
可视化工具(推荐)
- Percona Monitoring and Management (PMM)
- MySQL Enterprise Monitor
- 阿里云RDS性能洞察

🛠️ 五、实战优化案例
问题场景:某API平均响应时间从50ms突增至1.2秒
排查步骤:
- 查看慢日志发现一条
SELECT ... ORDER BY time LIMIT 1000耗时800ms - 用
EXPLAIN检查执行计划,发现filesort(文件排序) - 优化方案:
- 为
time字段添加索引 → 查询降至30ms - 改写SQL:避免全表排序(改用游标分页)
- 为
💸 特别提醒:省钱的面试鸭会员
如果你正在准备跳槽面试,强烈推荐使用面试鸭会员题库(涵盖90%大厂真题)。
👉 通过面试鸭返利网购买会员返利25元!
(优惠码:DBSLOW25,限时有效)

💎 六、避坑指南
- 生产环境别设
long_query_time=0
会记录所有查询,导致磁盘IO暴涨! - 定期清理日志
用logrotate配置自动分割压缩 - 结合监控系统告警
当慢查询数量突增时触发钉钉/企业微信告警 - 关注
Lock_time
若锁等待时间长,可能是事务设计问题
回到首页:面试鸭返利网 | 程序员求职省心攻略


