MySQL的慢查询截取分析

1.什么是慢查询?

2.如何开启并捕获慢查询语句?

3.使用show  profile查询SQL在MySQL服务器里面的执行细节和生命周期情况

一.什么是慢查询日志

MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL响应时间超过阀值的语句,具体指运行时间超过long_query_time值(默认值为10秒)的sql,则会被记录到慢查询日志中。

如果不是需要调优,一般不开启,默认是关闭的,因为开启会消耗性能。默认是:

show variables like  '%slow_query_log%';

我在我这里搞了个库,查看一下慢查询的状态,默认关闭

二.开启慢日志查询

我先看看我这个库的默认慢查询时间;

show variables like 'long_query_time%';

看默认是10S,如何我SELECT一条语句,响应时间超过了10S就会被记录

现在我修改MySQL默认的慢查询响应值,首先把上边的OFF状态设置为ON

set global slow_query_log=1

我把慢查询日志打开,然后再设置慢查询日志的响应时间。

如图,已经开启了慢查询日志,我再设置慢查询的响应时间,因为的表数据量没几个,所以我设置慢查询日志时间尽可能短,才能被慢查询日志捕获。

set global long_query_time=3;

设置完以后,需要断开重新连接或者新开一个session会话,如图:我设置了响应时间为0.001s,为了测试使用

我在表里插入了10条记录把,看看效果如何。其实MySQL性能还是挺好的,数据量超过400-500W才会出现性能问题。

因为MySQL对我这10条记录不Care,查询时间竟然比0.01S还快,如图所示

我们通过Navicat发现,MySQL的生命周期,从创建到执行的时间加起来都不超过0.001s。那么怎么办呢,我还是想让他超过满慢查询日志的阙值,这里我们可以模拟超时,我这里用到了MySQL类似于线程的方法,sleep()来操作。

我把慢查询时间设置3S:

然后我使用MySQL的sleep方法,让他睡5S

select sleep(5);

我们去MySQL目录下找日志,因为我这里是windows演示,所以再windows找,linux在这找,然后 cat    show.log文件就能看到

cd /lib/mysql

现在我找到我的MySQL,把数据库my.ini配置配置了日志路径,重启服务器然后重新设置睡眠时间为5S,现在默认是10S。执行

因为是windows,和linux有区别,但是从下图可以看出超过了慢日志的响应时间

三.使用show profile查看语句生命周期

查看当前系统中有多少条慢查询记录:show  global  status like '%Slow_queries%';

show profile是什么:MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于SQL的调优测量
默认情况下关闭状态,并保存最近15次的运行结果

这里就能查看sql的从创建到结束生命周期:

四.总结

以后搞测试还是去linux比较好;先用explain分析索引有没有用上,SQL语句执行很慢,必须先捕获,查看哪一条sql语句导致慢了,然后通show profile查看表的生命周期,有没有产生内排序或者临时表,这两个都很伤内存。然后通过分析再优化SQL语句

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值