Mysql慢查询

前言

Mysql的慢查询日志是MySql提供的一种日志记录,它用来记录在Mysql中响应时间超过阈值的SQL语句,具体是指运行时间超过 long_query_time 值的sql会被记录到慢查询日志中。

开启慢查询

Mysql默认情况下,是没有开启慢查询日志的,需要我们自己开启数据库的慢查询日志。

查看是否开启

show variables like '%slow_query_log%';
mysql> show variables like '%slow_query_log%';
+---------------------+------------------------------------------------------+
| Variable_name       | Value                                                |
+---------------------+------------------------------------------------------+
| slow_query_log      | OFF                                                  |
| slow_query_log_file | /usr/local/mysql/data/slow.log 						 |
+---------------------+------------------------------------------------------+
2 rows in set (0.00 sec)

OFF 表示是关闭状态。使用下边的命令进行开启:

set global slow_query_log=1;

如果要永久生效的话,需要配置到mysql的配置文件中。

记录慢查询

开启慢查询后,只有符合慢查询条件的sql才会记录到慢查询日志里。这个是由
long_query_time参数控制,默认情况下该值为10秒,也就是说只有查询**超过10秒(此处是大于,而非大于等于)**的sql才会记录到慢查讯日志中。使用如下命令查看:

show variables like 'long_query_time%';     ## 默认慢查询时间
mysql> show variables like 'long_query_time%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 3.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

因为本人已经修改过,所以在此显示为3秒钟,修改使用如下命令:

set global long_query_time=3;  ## 设置慢查询的时间

该配置同样可以配置在mysql的配置文件里。
修改之后,可以通过如下命令进行查看。如果看不到变化可以重新打开一个新的控制台进行查看。

show global variables like 'long_query_time%';

测试

使用mysql的sleep()函数进行测试,看看慢查询是不是能被记录

select sleep(4);
mysql> select sleep(4);
+----------+
| sleep(4) |
+----------+
|        0 |
+----------+
1 row in set (4.01 sec)

查询当前系统中有多少条慢查询记录,使用如下命令:

show global status like '%Slow_queries%';
mysql> show global status like '%Slow_queries%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 1     |
+---------------+-------+
1 row in set (0.00 sec)

根据如下命令可以知道,慢查询记录在 /usr/local/mysql/data/slow.log 该路径下的slow.log文件中,

show variables like '%slow_query_log%';

进入到相应目录下,查看记录:

/usr/local/mysql/bin/mysqld, Version: 5.7.22 (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /tmp/mysql.sock
Time                 Id Command    Argument
# Time: 2020-04-09T07:03:19.508636Z
# User@Host: root[root] @ localhost [127.0.0.1]  Id:     5
# Query_time: 4.005159  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
use bootdo;
SET timestamp=1586415799;
select sleep(4);

至此,慢查询sql已经记录到mysql中去了。
知道了哪些是慢查询sql,我们后续就可以根据Explain命令进行相应的优化了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值