Mysql关于慢查询的复习

Scroll Down

前言:在项目开发中,我们有些的Sql语句运行的很慢,我们就要来排查它,要么给它加索引,要么给他换一个写法,下面是一些学习记录。

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

上面标示了关键字,响应时间,阈值,long_query_time。

先通过sql语句查询出阈值是多少(工具用到的是Navicat)

show variables like 'long_query_time'

image.png

可以看到,我本地的Mysql的阈值是10S,下面我们测试一下一些Sql语句。

注意:默认情况下,Mysql数据库是没有开启慢查询日志的,如果不是要调优的话,不建议开启,会影响性能。

先通过sql语句查看是否开启了慢查询

show variables like '%slow_query_log%'

image.png

可以看到,状态是OFF状态,目前是没有开启的。

通过sql语句开启慢查询

#注意,此条语句,重启Mysql之后,就失效了。
set global slow_query_log = 1 

我们要正式进入测试了,但是上面默认的是超过10s的sql被判定为慢sql,这个不太现实,我们改下,让阈值小一点。

set global long_query_time = 1;

运行mysql的内置函数sleep,直接让睡眠超过阈值,试试。

select sleep(2);

注意:运行这条语句的时候,重新开一个控制端,因为我们之前设置的阈值没被使用上。

运行过后,去看看日志文件,在D盘下面。

image.png

可以看到,Queryt_time:2.00868s,引起慢查询的语句是,select sleep(2);

如果我们想看,到底有多少条慢sql,直接运行如下语句就可以了。

show status like 'slow_queries';

这是刚刚的那一条慢Sql。
image.png

到这里,就大功告成了,我们就知道如何去研究自己的哪一条sql慢了。