Mysql5.7开启慢查询日志

本文介绍了如何在MySQL5.7中开启和永久启用慢查询日志功能,通过设置`slow_query_log`、`slow_query_log_file`和`long_query_time`参数。同时,讲解了分析慢查询日志的方法,包括直接查看和使用`mysqldumpslow`工具进行格式化显示。最后提到了优化SQL语句的初步步骤,如使用`EXPLAIN`进行查询分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

MySql开启慢查询日志的功能,能够记录下响应时间超过设置阈值的SQL语句(包括SELECT、INSERT、DELETE、UPDATE、CALL等DML操作),以便于我们定位执行慢的SQL语句。

 

一、开启慢查询功能

1、临时开启:

可以使用命令查询是否开启此功能 :

mysql> show variables where variable_name like '%query_time%' or variable_name like '%query_log%';
+------------------------------+------------------------------+
| Variable_name                | Value                        |
+------------------------------+------------------------------+
| binlog_rows_query_log_events | OFF                          |
| long_query_time              | 10.000000                    |
| slow_query_log               | OFF                          |
| slow_query_log_file          | /data/mysql/server1-slow.log |
+------------------------------+------------------------------+
4 rows in set (0.01 sec)

slow_query_log:慢查询已关闭
slow_query_log_file:慢查询日志保存的文件路径
long_query_time:SQL语句响应超过10秒记录到慢查询日志中

 

相关操作

# 开启慢查询
mysql> set global slow_query_log = on;

# 设置响应时间
mysql> set long_query_time = 8;

# 设置慢查询日志保存方式
## file:保存在文件
## table:保存在mysql库下的slow_log表中
mysql> set global log_output = file;

# 重启mysql服务
systemctl restart mysqld

 

2、永久开启:

直接修改mysql配置文件 /etc/my.cnf ,添加以下:

slow_query_log=ON
slow_query_log_file=/data/mysql/server1-slow.log
long_query_time=10

 

二、分析慢查询日志

1、直接打开查看

2、使用mysqldumpslow查看:

PS:mysqldumpslow可以根据参数格式化的显示日志

#显示慢查询日志中最慢的10条sql

root# mysqldumpslow -t 10 /data/mysql/zabbix-server1-slow.log

Reading mysql slow query log from zabbix-server1-slow.log
Count: 1  Time=12.00s (12s)  Lock=0.00s (0s)  Rows=1.0 (1), root[root]@localhost
  select sleep(N)

Died at /usr/bin/mysqldumpslow line 161, <> chunk 1.

 

三、优化SQL语句

1、使用explain查询sql的执行情况

mysql> mysql> explain select User,Host from user;
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | user  | NULL       | index | NULL          | PRIMARY | 276     | NULL |    7 |   100.00 | Using index |
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)


参数分析:
id: 代表查询标识符。
select_type: 代表查询类型。
table:表示属于哪张数据表。
type:最重要的参数,表示连接使用的类型。从最好到最差的连接类型为const,eq_reg,ref,range,index和ALL。
possible_keys:显示可能应用在这张表中的索引。如果为null,则表示没有可能的索引。
key:实际使用的索引。如果为null,则表示没有使用索引。
key_len:使用的索引的长度,在不损失精确性的情况下,长度越短越好。
ref:表示索引的哪一列被使用了,如果可能的话,是一个常数。
rows:Mysql认为必须检查的用来返回请求数据的行数。 
filtered:表示存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例。
extra:查询计划器给出额外的信息说明。

 

未完待续。。。

 

### 配置 MySQL 5.7 慢查询日志 为了在 Windows 环境下启用 MySQL 5.7慢查询日志,需调整 MySQL 配置文件 `my.ini` 或者通过命令行动态更改全局变量。 #### 修改 my.ini 文件配置 打开 MySQL 安装目录下的 `my.ini` 文件,在 `[mysqld]` 下添加或修改以下参数: ```ini [mysqld] slow_query_log = ON long_query_time = 2 log_output = FILE slow_query_log_file = "D:\\mysql_logs\\slow_query.log" ``` 上述配置项解释如下: - `slow_query_log`: 设置为 `ON` 表示开启慢查询日志记录功能[^1]。 - `long_query_time`: 设定超过多少秒的 SQL 查询会被认为是慢查询,默认单位为秒。这里设定了超时时间为 2 秒。 - `log_output`: 日志输出目标可以是 TABLE (存储到数据库表内) 或者 FILE (保存至指定路径的日志文件),此处选择了后者即文件形式。 - `slow_query_log_file`: 明确指出了用于存放慢查询日志的具体位置以及文件名,注意路径应使用双反斜杠分隔符加上引号包裹整个字符串以防止路径中含有空格等问题引起错误[^3]。 完成编辑后重启 MySQL 服务使新设置生效。 #### 使用命令行动态配置 如果不想改动配置文件也可以直接登录 MySQL 命令行工具来临时改变这些选项而无需重新启动服务器进程: ```sql SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 2; SET GLOBAL log_output = 'FILE'; SET GLOBAL slow_query_log_file = 'D:/mysql_logs/slow_query.log'; ``` 以上语句实现了相同的效果——开启慢查询日志将符合条件的查询记录到了给定的位置上[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值