前言
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命令进行相应的优化了。