当前位置: 首页 > article >正文

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

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

7. 注意事项

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

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


http://www.kler.cn/a/600901.html

相关文章:

  • 【操作系统】Docker如何使用-续
  • 关于瑞芯微开发工具(RKDevTool)刷机下载Boot失败原因的研究
  • VUE3项目VITE打包优化
  • leetcode3.无重复字符的最长字串
  • G 2024hubei province 学习到的内容
  • 各类神经网络学习:(四)RNN 循环神经网络(下集),pytorch 版的 RNN 代码编写
  • AI+数字孪生:能碳管理中心的智能预测与动态优化
  • Python Django系列—多数据库
  • 干货分享|DeepSeek技术革命、算力范式重构与场景落地洞察
  • JavaEE企业级开发 延迟双删+版本号机制(乐观锁) 事务保证redis和mysql的数据一致性 示例
  • 常用的几种思维方式
  • 2024年MathorCup数学建模C题物流网络分拣中心货量预测及人员排班解题全过程文档加程序
  • Android 12.0 WiFi连接默认设置静态IP地址功能实现
  • 【免费】2007-2019年各省地方财政非税收入数据
  • 【从零实现Json-Rpc框架】- 第三方库介绍 - Muduo篇
  • python每日十题(9)
  • 怎么用 DeepSeek 替你做外贸
  • C++设计模式-装饰模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
  • 【C语言】信号
  • Linux防火墙基础部分Firewalld防火墙(小白入门级别)