一、前言
这篇博客是之前总结的一个知识点,也是偶然看别人博客的时候发现的这个东东,,也算是解析sql语句性能的利器吧,记录一哈。
Query Profiler
是MYSQL
自带的一种query诊断分析工具,通过它可以分析出一条SQL
语句的性能瓶颈在什么地方。通常我们是使用的explain
,以及slow query log
都无法做到精确分析,但是Query Profiler
却可以定位出一条SQL语句执行的各种资源消耗情况,比如CPU,IO
等,以及该SQL执行所耗费的时间等。不过该工具只有在MYSQL 5.0.37
以及以上版本中才有实现。
这个工具比explain
更加详细,侧重点也在语句的资源消耗上,还会给出一些异常参数。和mysql的查询优化器侧重的点不一样,但是如果把这三个工具结合起来分析sql,那可真是太赞了。(PS:一般是想不起来三个一起用的,哈哈)
explain: MySQL的性能分析关键字,explain,及其返回值代表的意思
查询优化器: mysql的优化器执行过程(附代码解析,手动注释等)
二、正文
1、开启
show variables like '%profil%'; 解释:这种方式是查看自己版本的是否开启了Profile, profiling=on是开启了这个profile功能,
show profiles; 解释:Empty set (0.00 sec)显示为空,说明profiles功能是关闭的。下面开启
SET profiling = 1; 解释:打开profiles
select xx; #查询语句 解释:执行sql
show profiles; 解释:此时里面会有id,还有query,query是咱们刚才执行的sql
show profile all for query 1; # 1为上一步得到的id,查看详细信息
2、查看
show profile all for query id;
直接看的话,太杂乱了,可以考虑使用show profile all for query 1 \G;
这样看起来方便,可以参考:
https://blog.****.net/LJFPHP/article/details/87873280
3、主要参数解析
这个工具的异常参数很多,而且网上大佬总结的很到位,这边直接看大佬的博客吧,记录下。
参考:[MySQL FAQ]系列 — processlist中哪些状态要引起关注
http://imysql.com/2015/06/10/mysql-faq-processlist-thread-states.shtml
这篇博客顺便把各个参数异常的解决方案给出了,大家可以看一下
4、新的查看方式
还有一种说法:在MySQL5.7
中, show profile
命令已经开始不推荐使用,MySQL使用performance_schema
中系统表的信息来替代show profile
命令。链接:https://www.cnblogs.com/wy123/p/6979499.html
这里虽然过时了,但是博主测试下,mysql5.7
还是支持show profiles
这种用法。而且就算用新的系统表来查看,得出的参数也是差不多的,甚至没有show profiles
全面。相同参数的含义相同。
end