MYSQL慢日志

MySQL的慢查询日志(Slow Query Log)可以帮助数据库管理员识别执行时间较长的SQL语句。通过分析这些慢查询,可以发现性能瓶颈并采取相应的优化措施。

启用慢查询日志,需要在MySQL配置文件(通常是my.cnfmy.ini)中设置相关参数,或者直接在运行时使用SET命令来修改。

复制代码
mysql> show variables like '%slow_query_log%';
+---------------------+-----------------------------------------+
| Variable_name       | Value                                   |
+---------------------+-----------------------------------------+
| slow_query_log      | OFF                                     |
| slow_query_log_file | D:\develop\...\LAPTOP-3JODIVUS-slow.log |
+---------------------+-----------------------------------------+
2 rows in set, 1 warning (0.02 sec)

mysql> show variables like '%long_query%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set, 1 warning (0.00 sec)

配置文件设置

复制代码
[mysqld]
slow_query_log = 1  # 开启慢查询日志
slow_query_log_file = /path/to/your/slow-query.log  # 指定日志文件路径
long_query_time = 2  # 设置阈值,默认单位是秒
log_queries_not_using_indexes = 1  # 记录没有使用索引的查询
  • slow_query_log:开启慢查询日志功能。
  • slow_query_log_file:指定慢查询日志文件的存储位置。
  • long_query_time:定义了查询需要多长时间才被记录到慢查询日志中。默认单位是秒,也可以设置为毫秒。
  • log_queries_not_using_indexes:如果设置为1,那么所有不使用索引的查询都将被记录,无论它们是否超过了long_query_time

运行时设置

在 MySQL 服务器运行时通过 SQL 命令临时更改设置

复制代码
# 全局开启
SET GLOBAL slow_query_log = 'ON';
# 指定路径和名称
SET GLOBAL slow_query_log_file = 'D:\\slow-query-log.log';
# 调整时间阈值
SET GLOBAL long_query_time = 3;
# 记录未使用索引的查询
SET GLOBAL log_queries_not_using_indexes = 'ON';

查看和分析慢查询日志

一旦开启了慢查询日志,并且有一些慢查询被记录下来后,可以使用文本编辑器打开日志文件查看内容。通常会使用一些专门的工具来分析这些日志,例如mysqldumpslowpt-query-digest(Percona Toolkit的一部分)等。

  • mysqldumpslow:MySQL 自带的简单工具,可以用来汇总慢查询日志中的数据。
  • pt-query-digest:更强大的工具,可以从慢查询日志中提取出详细的统计信息,并生成报告。

相关命令:

复制代码
//查看慢查询日志是否开启
SHOW VARIABLES LIKE '%slow_query_log%';
//查看时间阈值:
SHOW VARIABLES LIKE 'long_query_time%';
相关推荐
廿一夏38 分钟前
MySql存储引擎与索引
数据库·sql·mysql
敲个大西瓜3 小时前
Java项目常用数据归档方式
mysql
kyriewen5 小时前
面试官让我查各部门工资最高的员工,我用AI三秒写出窗口函数,他愣了
后端·mysql·面试
小码工作室6 小时前
使用 HAVING 进行 MySQL 集合筛选
mysql
罗超驿6 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
小江的记录本6 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
木心术17 小时前
Windows系统下MySQL与AI工具集成方案:数据存储与调用实践
人工智能·windows·mysql
这个DBA有点耶7 小时前
SQL改写实战:子查询、CTE、窗口函数性能对比
数据库·mysql·性能优化
小江的记录本8 小时前
【Java基础】反射与注解:核心原理、自定义注解、注解解析方式(附《思维导图》+《面试高频考点清单》)
java·数据结构·python·mysql·spring·面试·maven
Java成神之路-8 小时前
深入拆解 MySQL InnoDB 隔离级别:从 MVCC 到临键锁
mysql