Mysql5.7开启慢查询日志

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

前言

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:查询计划器给出额外的信息说明。

 

未完待续。。。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值