mysql慢查询

1、慢查询作用?

它能记录下所有执行超过long_query_time时间的sql语句,帮你找到执行慢的sql,方便我们对这些sql语句进行优化。

2、如何开启慢查询?

首先我们先查看mysql服务器的慢查询状态是否开启。

执行如下指令:

wKiom1coHYDD65rsAAAwCDMf8M4016.png

我们可以看到log_slow_queries状态为ON,说明当前已经开启慢查询。如果没有开启,进行如下操作:

方法一:找到mysql的配置文件my.cnf(/etc/my.cnf),在mysqld下方加入慢查询的配置语句(注意一定要在[mysqld]的下方添加,如果是在[mysqld_safe]下面加入配置语句是不会生效的. 我在配置过程中就犯了这个错误, 亲身体会到了其痛苦!)

wKioL1coIKGS_egCAAA2ncDcEGY556.png

log-slow-queries:代表mysql慢查询的日志存储目录,此目录文件一定要有写权限

long_query_time:最长执行时间(如图,mysql将记录下所有执行时间超过2秒的sql语句,测试时候时间不应太短);

配置好了以后重新启动mysql服务,service mysqld restart 

方法二:在mysql命令下执行如下操作:

wKiom1coIfPyBNCEAAAPQSsYTAE774.png

通过set命令来设置mysql变量的状态,但这个只是临时生效,重启服务后就回复原来的状态。

配置完成后我们来检查一下状态,如下图:

wKioL1coIy_CocRNAAAyzy2LZDA253.png
说明已经开启了慢查询服务,并且时间限制为2秒。

3、慢查询日志验证

我们在观察一下/var/lib/mysql/目录下面是否自动创建了mysql-slow.log文件。

wKiom1coIxXgI72XAAA_XEDEn6o597.png

cat mysql-slow.log 发现文件已存在. 只是文件中并没有任务SQL的记录. 那么现在我们测试一下执行一条超过long_query_time的SQL语句.

wKiom1coI2WxcSJnAAAWGqSAoBo865.png

执行完了一个5秒的SQL语句, 不出意外的情况下mysql-slow.log文件中应该记录下了这条SQL语句. OK! 我们cat mysql-slow.log一下

wKioL1coJQXD5P_hAABJ37QesX0507.png

果然,慢查询的整个日志过程配置完成!