1. MySQL慢查询日志概述
作为一名Java后端开发者,我经常需要与MySQL数据库打交道。在多年的开发实践中,我发现慢查询日志是排查数据库性能问题最有效的工具之一。当线上系统出现接口响应缓慢、CPU或IO负载飙升、数据库连接池耗尽等问题时,90%的情况下都能通过慢查询日志找到根源。
慢查询日志会记录所有执行时间超过预设阈值的SQL语句,包括SELECT、UPDATE、INSERT、DELETE等各种操作。这个功能对于定位性能瓶颈至关重要,因为它能直接告诉我们哪些SQL语句在执行时遇到了问题。
判断一个查询是否会被记录到慢查询日志中,需要同时满足以下条件:
- 执行时间超过long_query_time参数设置的阈值(单位:秒)
- 检查的行数超过min_examined_row_limit参数设置的值(默认为0)
- 如果开启了log_queries_not_using_indexes参数,即使执行时间未超时但未使用索引的查询也会被记录
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MySQL 8.0+慢查询日志配置详解
2.1 核心配置参数解析
在MySQL 8.0及以上版本中,慢查询日志的相关配置参数如下表所示:
| 参数 | 默认值 | 说明 | 生产环境推荐值 |
|---|---|---|---|
| slow_query_log | OFF | 慢查询日志总开关 | ON |
| slow_query_log_file | hostname-slow.log | 日志文件路径 | /data/mysql/slow.log |
| long_query_time | 10.000000 | 慢查询阈值(秒) | 0.5~2 |
| log_queries_not_using_indexes | OFF | 记录未使用索引的查询 | ON |
| min_examined_row_limit | 0 | 最小检查行数阈值 | 1000+ |
| log_output | FILE | 输出方式 | FILE |
| log_slow_admin_statements | OFF | 记录慢DDL语句 | 按需开启 |
在实际生产环境中,我建议将日志文件放在单独的磁盘分区上,避免与数据文件产生IO竞争。对于高并发系统,long_query_time通常设置为0.5~2秒比较合适,具体取决于业务对响应时间的敏感度。
