要想进阶针对mysql学习乃至掌握mysql调优的基本技能,监控mysql的执行情况必不可少。就像我们的代码,如果不能debug,想要进行调优排错,难度将会大大增加。
所以今天我们就来讲解如何监控mysql的sql执行情况
show profile指令
- 什么是show profile?
- 如何使用show profile?
- show processlist 监控连接线程数
- last_query_cost 监控数据页
什么是show profile?
show profile是mysql提供的用来分析当前会话中sql语句执行的资源消耗情况,利用它我们可以用来分析sql的性能,作为调优的测量工具
show profile默认是关闭的,可以通过set profiling=1
;指令来开启,但是需要注意的是每次开启只是生效在当前会话中,想要永久生效的话需要修改mysql配置文件
如何使用show profile?
- 首先开启show profile,mysql中执行指令
1|set profiling=1;
- 我们运行一段测试的sql
1|select * from user_test.user where id in (select id from user_test.food);
- 执行
show profiles;
查询最近执行的sql的情况
如上图所示,我们可以看到,我们刚刚执行的这条sql的执行时间为0.00054s,queryId为243 - 那么我们还可以通过这个queryId进阶监控这个sql的其他资源消耗情况,比如查询其CPU的消耗情况
1|show profile CPU for query 243;![在这里插入图片描述](https://img-blog.csdnimg.cn/93b35d2337d941b4a7878093ef45d1e6.png)
其中status
表示的是sql指定的各个阶段的状态,duration
表示的是各个状态的耗时,cpu_user
表示当前用户占用的cpu,cpu_system
表示系统占用的cpu
结果分析:通过上述结果可知,我们执行的sql的大部分时间消耗在启动上,其次消耗在打开table,真正花在执行上的时间只有0.000061s
除了上述演示的监控cpu的资源消耗,show profile还提供了如下的监控类型
指令格式:
1|show profile [type] [for query query_id]
show processlist 监控连接线程数
show processlist
指令可以查询到mysql当前的连接线程,以此来监控mysql是否有大量线程数连接,从而进行排查
1|show processlist
执行结果
last_query_cost 监控数据页
last_query_cost
指令用于查询最近一次查询需要查找多少个数据页。mysql中是以数据页为单位来存储数据的,查找的数据页越多,IO越高,性能越差
1|show status like 'last_query_cost';
执行结果