mysql中慢sql处理方案

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

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

查看是否开启
show variables like '%slow_query_log%';
1
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;
1
如果要永久生效的话,需要配置到mysql的配置文件中。

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

show variables like 'long_query_time%';     ## 默认慢查询时间
1
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;  ## 设置慢查询的时间
1
该配置同样可以配置在mysql的配置文件里。
修改之后,可以通过如下命令进行查看。如果看不到变化可以重新打开一个新的控制台进行查看。

show global variables like 'long_query_time%';
1
测试
使用mysql的sleep()函数进行测试,看看慢查询是不是能被记录

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

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

show global status like '%Slow_queries%';
1
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%';
1
进入到相应目录下,查看记录:

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

你可能感兴趣的:(mysql,sql,数据库)