mysql监控sql执行情况

要想进阶针对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?

  1. 首先开启show profile,mysql中执行指令
1|set profiling=1;
  1. 我们运行一段测试的sql
1|select * from user_test.user where id in (select id from user_test.food);
  1. 执行show profiles; 查询最近执行的sql的情况
    mysql监控sql执行情况_第1张图片
    如上图所示,我们可以看到,我们刚刚执行的这条sql的执行时间为0.00054s,queryId为243
  2. 那么我们还可以通过这个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

执行结果
mysql监控sql执行情况_第2张图片

last_query_cost 监控数据页

last_query_cost指令用于查询最近一次查询需要查找多少个数据页。mysql中是以数据页为单位来存储数据的,查找的数据页越多,IO越高,性能越差

1|show status like 'last_query_cost';

执行结果
mysql监控sql执行情况_第3张图片

你可能感兴趣的:(mysql数据库,mysql,sql,数据库)