mysql慢查询日志
在 MySQL 中,慢查询日志(Slow Query Log)用于记录执行时间超过指定阈值的 SQL 语句。通过分析慢查询日志,可以优化数据库性能。以下是查看和配置 MySQL 慢查询日志的详细步骤:
1. 检查慢查询日志是否已启用
登录 MySQL 后,执行以下命令查看慢查询日志的状态:
SHOW VARIABLES LIKE 'slow_query_log';
• 如果结果为 ON
,表示慢查询日志已启用。
• 如果结果为 OFF
,需要手动启用。
2. 启用慢查询日志
如果慢查询日志未启用,可以通过以下步骤启用:
临时启用(重启 MySQL 后失效)
在 MySQL 中执行以下命令:
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2; -- 设置慢查询阈值(单位:秒)
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log'; -- 指定日志文件路径
永久启用(修改配置文件)
编辑 MySQL 配置文件(通常为 /etc/my.cnf
或 /etc/mysql/mysql.conf.d/mysqld.cnf
或/etc/my.cnf.d/mysql-server.cnf
),添加或修改以下内容:
[mysqld]
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 服务:
sudo systemctl restart mysqld
3. 查看慢查询日志文件
慢查询日志默认保存在 /var/log/mysql/slow.log
(路径可通过 slow_query_log_file
变量查看)。使用以下命令查看日志内容:
sudo cat /var/log/mysql/slow.log
4. 使用 mysqldumpslow
分析慢查询日志
MySQL 提供了 mysqldumpslow
工具,用于分析慢查询日志并生成统计信息。以下是常用命令示例:
查看最慢的 10 条查询
sudo mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
查看未使用索引的查询
sudo mysqldumpslow -g 'not_using_index' /var/log/mysql/slow.log
按执行次数排序
sudo mysqldumpslow -s c -t 10 /var/log/mysql/slow.log
5. 慢查询日志示例
慢查询日志的格式如下:
# Time: 2025-03-25T12:34:56.789012Z
# User@Host: root[root] @ localhost [] Id: 12345
# Query_time: 5.123456 Lock_time: 0.000123 Rows_sent: 10 Rows_examined: 100000
SET timestamp=1711355696;
SELECT * FROM users WHERE age > 30;
• Query_time:查询执行时间。
• Lock_time:锁定时间。
• Rows_sent:返回的行数。
• Rows_examined:扫描的行数。
6. 优化慢查询
根据慢查询日志中的 SQL 语句,可以采取以下优化措施:
- 添加索引:确保查询字段已建立索引。
CREATE INDEX idx_age ON users(age);
- 优化 SQL 语句:避免全表扫描,使用
EXPLAIN
分析查询计划。EXPLAIN SELECT * FROM users WHERE age > 30;
- 调整表结构:将大表拆分为小表,或使用分区表。
- 缓存结果:对于频繁查询且数据变化较少的场景,使用缓存(如 Redis)。
7. 注意事项
• 日志文件大小:慢查询日志可能会快速增长,需定期清理或轮转。
• 生产环境谨慎启用:长时间记录慢查询日志可能会影响性能,建议仅在调试时启用。
• 权限问题:确保 MySQL 用户对日志文件路径有写权限。
通过以上步骤,您可以轻松查看和分析 MySQL 慢查询日志,并优化数据库性能。