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

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 慢查询日志,并优化数据库性能。

相关文章:

  • Python - 爬虫-网页抓取数据-工具wget
  • ngx_http_core_root
  • Vue 中 v-if 和 v-show 的区别
  • 如何设计有效的用户反馈闭环机制
  • 微信小程序面试内容整理-如何优化小程序的启动速度?
  • 人工智能通识速览
  • 基于Spring Boot的消防物资存储系统的设计与实现(LW+源码+讲解)
  • deepseek实战教程-第五篇支持deepseek的大模型应用安装及使用
  • 基于 SGLang 部署 Qwen2.5 7B 模型
  • 正点原子内存管理学习和修改
  • Linux深度解析运行级别管理
  • 自动插入分号机制
  • ElementUI el-menu导航开启vue-router模式
  • C语言 - 整数与浮点数运算的类型转换规则
  • 定时器(java)
  • Linux安装MySQL数据库并使用C语言进行数据库开发
  • 【从零实现Json-Rpc框架】- 项目设计篇
  • C语言指针(二)
  • 有哪一些解放生产力的AI工具【前端】
  • GAMES101-现代计算机图形学入门(Assignment5)
  • 如何加强企业网站建设 论文/网页怎么做
  • 可以免费做推广的网站/近期时政热点新闻20条
  • 上海市建设交通工会网站/营销案例
  • 网站你啦怎样做旺仔饼干/违禁网站用什么浏览器
  • 网站做支付宝花呗分期/seo监控
  • 政府网站群建设中标公告/重庆森林经典台词图片