mysql慢查询日志

发布于:2025-03-27 ⋅ 阅读:(39) ⋅ 点赞:(0)

在 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 语句,可以采取以下优化措施:

  1. 添加索引:确保查询字段已建立索引。
    CREATE INDEX idx_age ON users(age);
    
  2. 优化 SQL 语句:避免全表扫描,使用 EXPLAIN 分析查询计划。
    EXPLAIN SELECT * FROM users WHERE age > 30;
    
  3. 调整表结构:将大表拆分为小表,或使用分区表。
  4. 缓存结果:对于频繁查询且数据变化较少的场景,使用缓存(如 Redis)。

7. 注意事项

日志文件大小:慢查询日志可能会快速增长,需定期清理或轮转。
生产环境谨慎启用:长时间记录慢查询日志可能会影响性能,建议仅在调试时启用。
权限问题:确保 MySQL 用户对日志文件路径有写权限。

通过以上步骤,您可以轻松查看和分析 MySQL 慢查询日志,并优化数据库性能。