注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

MySQL使用profile分析SQL语句执行过程

MySQL 彭东稳 5911次浏览 已收录 0个评论

分析SQL执行带来的开销是优化SQL的重要手段。在MySQL数据库中,可以通过配置profiling参数来启用SQL剖析。该参数可以在全局和session级别来设置。对于全局级别则作用于整个MySQL实例,而session级别紧影响当前session。该参数开启后,后续执行的SQL语句都将记录其资源开销,诸如IO,上下文切换,CPU,Memory等等。根据这些开销进一步分析当前SQL瓶颈从而进行优化与调整。本文描述了如何使用MySQL profile,不涉及具体的样例分析。

1、有关profile的描述

查看profiling系统变量

获取profile的帮助

2、开启porfiling

启用session级别的profiling

验证修改后的结果

发布SQL查询

查看当前session所有已产生的profile

我们看到有2个warning,之前一个,现在一个

告警是说SHOW PROFILES命令将来会被Performance Schema替换掉。

3、获取SQL语句的开销信息

开启profiling后,我们可以通过show profile等方式查看,其实这些开销信息被记录到information_schema.profiling表中。注show profile之类的语句不会被profiling,即自身不会产生Profiling。

我们下面的这个show profile查看的是show warnings产生的相应开销。

如下面的查询show warnings被添加到profiles

获取指定查询的开销(Druation表示持续时间)

Sending data:这个状态的名称很具有误导性,所谓的“Sending data”并不是单纯的发送数据,而是包括“收集 + 发送 数据”。

query end:表示语句执行完毕了,但是还有一些后续工作没做完时的状态。

freeing items:释放查询缓存里面的空间,如果是DML操作,所以相应的缓存里的记录就无效了,所以需要有这一步做处理。

查看所有开销

查看特定部分的开销,如下为CPU部分的开销

如下为MEMORY部分的开销

同时查看不同资源开销

4、INFORMATION_SCHEMA.PROFILING

上面已经看到了,show profile命令即将移除,所以可以直接去information_schema.profiling表查看,灵活度更大,其表结构信息如下:

下面的SQL语句用于查询query_id为2的SQL开销,且按最大耗用时间倒序排列

停止profile,可以设置profiling参数,或者在session退出之后,profiling会被自动关闭。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (1)or分享 (0)
关于作者:

您必须 登录 才能发表评论!