MySQL的慢查询日志

慢查询日志是什么?

慢查询日志是MySQL提供的一种专门记录sql执行时间超过预先设置好阈值的语句等信息

慢查询日志怎么开启?

慢查询日志是默认关闭的!

可以通过命令进行查看慢日志的状态

 

show variables like '%slow_query_log%';  #查看慢日志状态

 

 

 

 开启慢日志的命令(1代表开启,0代表关闭)

set global slow_query_log=1; 

#开启慢日志,只对本次有效,重启之后还是关闭的。

如果想要永久生效的话,就需要修改my.cnf文件

在[mysqld]下添加

slow_query_log=1
slow_query_log_file=/var/lib/mysql/node-slow.log #这个代表的是慢日志文件存放的路径

慢日志不在调优的时候一般是关闭的,因为开启慢日志多多少少会降低效率。

什么样的查询语句才能称为慢查询呢?慢日志会记录什么样的SQL呢?

这个是由参数long_query_time控制的,此值的默认值为10秒。
当某一条语句的执行时间大于这个参数值的时候,(等于的话不会被记录),就会被慢日志给记录下来

SHOW VARIABLES LIKE 'long_query_time%'; #查看设置的时间阈值

 

 

 修改long_query_time的值的方法

set global long_query_time=3; #设置慢查询时间的阈值为3秒

注意:执行完上面的语句后,在此进行查看的时候,会发现值没有变过来,
这时候需要重新开一个会话,或者断开连接之后重连,更或者换一条命令进行查询,就可以看到你修改后的值了

SHOW GLOBAL     VARIABLES LIKE 'long_query_time%';

 

 

 当然你也可以使用配置my.cnf文件的方式进行修改,在[mysqld]下添加如下参数(前题是)

slow_query_log=1
slow_query_log_file=/var/lib/mysql/node-slow.log #这个代表的是慢日志文件存放的路径
long_query_time=3;
log_output=FILE

模拟一条慢查询语句

select sleep(4);#在这条sql执行期间,睡眠4秒

执行完成之后,打开慢日志文件进行查看,如下图所示

 

 如果我们想要统计一共记录了多少条慢sql语句,可以使用如下命令

show global status like '%Slow_queries%';

 

 日志分析工具mysqldumpslow

常用属性

s:表示按照何种方式排序
c:访问次数
l:锁定时间
r:返回记录
t:查询时间
al:平均锁定时间
ar:平均返回记录数
at:平均查询时间
t:即为返回前面多少条的数据:
g:后边搭配一个正则匹配模式,大小写不敏感的

举个例子:

mysqldumpslow -s r -t 10 /var/lib/mysql/node-slow.log

得到返回记录集最多的10条sql

 

 这些是本人学习mysql优化,对于慢查询日志的总结,不足之处,请大家指出,谢谢

posted @ 2019-12-28 16:14  天戈  阅读(437)  评论(0编辑  收藏  举报