🗣 Wd提问: MySQL慢查询日志
🤖 Ai回答: MySQL 慢查询日志详解
慢查询日志是MySQL提供的一个非常有用的功能,用于记录执行时间超过指定阈值的SQL语句,帮助开发者识别和优化性能瓶颈。
启用慢查询日志
临时启用(无需重启)
sql
开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
设置慢查询阈值(单位:秒)
SET GLOBAL long_query_time = 1;
设置日志文件路径
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
记录未使用索引的查询(即使执行时间较短)
SET GLOBAL log_queries_not_using_indexes = 'ON';
永久配置(需修改my.cnf/my.ini)
ini
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
查看慢查询日志
直接查看日志文件
查看日志内容
cat /var/log/mysql/mysql-slow.log
实时监控日志变化
tail -f /var/log/mysql/mysql-slow.log
使用mysqldumpslow工具分析
MySQL提供了`mysqldumpslow`工具帮助分析慢查询日志:
查看执行时间最长的10个查询
mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log
查看执行次数最多的查询
mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log
查看包含特定关键词的慢查询
mysqldumpslow -g SELECT /var/log/mysql/mysql-slow.log
使用pt-query-digest分析(Percona Toolkit)
pt-query-digest /var/log/mysql/mysql-slow.log
慢查询日志格式说明
典型的慢查询日志条目包含以下信息:
Time: 2023-10-15T14:23:12.123456Z
User@Host: root[root] @ localhost [] Id: 12
Query_time: 2.345678 Lock_time: 0.000123 Rows_sent: 10 Rows_examined: 10000
SET timestamp=1234567890;
SELECT * FROM large_table WHERE some_column = 'value';
Query_time: 查询执行总时间
Lock_time: 锁定时间
Rows_sent: 返回给客户端的行数
Rows_examined: 服务器检查的行数
最佳实践
1、合理设置阈值:生产环境通常设置为1-2秒,开发环境可以更低
2、定期轮转日志:防止日志文件过大
3、结合EXPLAIN分析:对发现的慢查询使用EXPLAIN查看执行计划
4、监控日志大小:确保不会耗尽磁盘空间
5、生产环境谨慎使用:长期开启可能对性能有轻微影响
注意事项
修改`long_query_time`后,需要重新建立连接才会生效
慢查询日志不会记录管理语句(如ALTER TABLE, CREATE INDEX等)
在高并发系统中,慢查询日志可能变得非常大,需要定期清理
📣 商家广告:





0
IP地址: 124.42.95.93
搜索次数: 18
提问时间: 2025-12-06 01:34:51
本站所有
❓
问答
均由Ai自动分析整理,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
本站由
🟢
豌豆Ai
提供技术支持,使用的最新版:
豌豆Ai站群搜索引擎系统 V.25.10.25
搭建本站。