MySQL慢查询日志开启与分析实战指南
慢查询日志的作用与开启方法
MySQL慢查询日志是数据库性能调优的核心工具,用于记录执行时间超过设定阈值的SQL语句。在IDC托管环境下,合理利用慢查询日志可快速定位资源消耗高、响应延迟大的查询,从而优化数据库负载,提升业务稳定性。
一、开启慢查询日志
通过修改MySQL配置文件(my.cnf或my.ini)或在运行时使用SET GLOBAL命令开启。推荐配置如下:
- slow_query_log = 1:启用慢查询日志。
- slow_query_log_file = /var/log/mysql/slow.log:指定日志文件路径。
- long_query_time = 2:定义慢查询阈值(单位秒,建议初始设为2秒)。
- log_queries_not_using_indexes = 1:记录未使用索引的查询(可选)。
修改后需重启MySQL服务或执行SET GLOBAL slow_query_log = ON;等动态生效。注意:生产环境开启日志可能产生I/O开销,建议仅在排查或压测期间启用。
二、日志分析方法
1. 内置工具mysqldumpslow
MySQL自带mysqldumpslow命令可汇总日志,例如:
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log 按查询时间排序,显示前10条最慢SQL。
2. 第三方工具pt-query-digest
Percona Toolkit中的pt-query-digest提供更详细的报告,支持过滤、聚合与图形化输出(需额外安装)。使用示例:pt-query-digest /var/log/mysql/slow.log。
三、关键分析维度
- 执行频率与总耗时:高频且耗时的查询优先优化。
- 锁等待时间:检查是否因表锁或行锁导致延迟。
- 索引使用情况:未使用索引的查询应考虑添加合适索引。
- 临时表与排序:大量使用临时表或文件排序需优化SQL或调整内存参数。
四、优化建议
根据分析结果,可采取以下措施:
- 为WHERE、JOIN、ORDER BY字段添加索引。
- 改写复杂子查询为JOIN或临时表。
- 调整MySQL内存配置(如innodb_buffer_pool_size)。
- 对慢查询日志定期轮转,避免单文件过大影响服务器性能。
在IDC运维环境中,建议将慢查询日志与分析自动化,通过定时任务生成报告并推送至监控系统,实现快速响应。