几个必须掌握的SQL优化技巧(五):Show Profile分析SQL性能

小知识,大挑战!本文正在参与“   程序员必备小知识   ”创作活动

作者的其他平台:

| CSDN:blog.csdn.net/qq_4115394…

| 掘金:juejin.cn/user/651387…

| 知乎:www.zhihu.com/people/1024…

| GitHub:github.com/JiangXia-10…

| 公众号:1024笔记

本文大概1734字,读完共需5分钟

1 前言

在应用的开发过程中,由于开发初期的数据量一般都比较小,所以开发过程中一般都比较注重功能上的实现,但是当完成了一个应用或者系统之后,随着生产数据量的急剧增长,那么之前的很多sql语句的写法就会显现出一定的性能问题,对生产的影响也会越来越大,这些不恰当的sql语句就会成为整个系统性能的瓶颈,为了追求系统的极致性能,必须要对它们进行优化。

2 正文

前面有一篇文章:几个必须掌握的SQL优化技巧(三):Explain分析执行计划介绍了如何使用explain命令对sql的执行计划进行分析,具体的命令格式如下

explain + select语
复制代码

今天这篇文章将会介绍如何使用show profile命令来分析SQL性能和具体的时间耗费情况。

MySQL从5.0.37版本开始增加了对show profile和show profiles语句的支持,所以要想使用此功能,要确保版本在5.0.37之后。show profiles能够在做SQL优化时帮助我们了解SQL语句的性能耗费。

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

通过have_profiling参数,能够看到当前MySQL是否支持profile:

图片

默认profiling是关闭的,那么可以通过set语句在session级别开启profiling:

set profiling=1
复制代码

图片

通过profile,能够清楚的了解SQL执行的过程。

比如输入show profiles命令后,我们可以看到各个sql语句执行的耗时:

图片

queryid表示当前查询的id;query表示执行的sql操作;duration表示sql操作执行的时间耗费。

执行完上面的show profiles命令后,可以通过下面的命令来具体分析某个sql语句的时间具体耗费情况:

show profile for query query_id
复制代码

比如分析query_id为175的sql操作的具体情况:

show profile for query 175
复制代码

结果如下:

图片

Status表示状态阶段,而Duration表示该状态阶段的耗时。

在获取了最小消耗时间的线程状态之后,mysql支持进一步选择all、cpu、block io、page faults等明细类型查看mysql在使用什么资源上耗费了过高的时间,如果输入:

show profile for all query query_id
复制代码

则可以展示所有的信息,部分如下:

图片

也可以输入

show profile for 上面结果的某个具体字段 query query_id
比如
show profile for cpu query query_id
复制代码

查看详细的具体情况。

图片

3 总结

这篇文章主要介绍了show profiles和show profile命令来查看sql操作在各个阶段的具体耗时情况,从而方便我们进行后续的sql优化操作。

后面将会继续分享关于sql优化的其他方法、步骤。

最后如果觉得本文写得不错,就推荐给更多的人呗。

今日推荐

今天我们来说说MySQL的存储引擎

SQL语言:DDL、DML、DQL、DCL详解

几个必须掌握的SQL优化技巧(一):查看SQL语句的执行频率

几个必须掌握的SQL优化技巧(二):如何定位低效率执行SQL

几个必须掌握的SQL优化技巧(三):Explain分析执行计划

几个必须掌握的SQL优化技巧(四):使用Trace工具分析优化器执行计划

猜你喜欢

转载自juejin.im/post/7017806361639518244