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 global status like '%Slow_queries%';
show profile是什么:MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于SQL的调优测量
默认情况下关闭状态,并保存最近15次的运行结果
这里就能查看sql的从创建到结束生命周期:
以后搞测试还是去linux比较好;先用explain分析索引有没有用上,SQL语句执行很慢,必须先捕获,查看哪一条sql语句导致慢了,然后通show profile查看表的生命周期,有没有产生内排序或者临时表,这两个都很伤内存。然后通过分析再优化SQL语句