慢查询日志是什么?
慢查询日志是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优化,对于慢查询日志的总结,不足之处,请大家指出,谢谢