当前位置:首页 > mysql > 正文内容

mysql中性能分析Profiling

phpmianshi4年前 (2017-04-13)mysql326

概念


Show Profile是mysql提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于Sql调优的测量。


示例


1、先查看是否开启了此功能,默认情况下,参数处于关闭状态,为OFF状态


 

    show variables like 'profiling%';


2、开启Profiling

    set profiling=1;

3、展示最近的SQL执行情况:

    show profiles;

此命令展示最近执行的sql语句,默认是15次,一个示例如下:

展示最近的15条


Query_ID会一直递增,后期我们会使用这个id,来具体查询某一条SQL的执行耗时清单

4、具体查看某一条SQL的执行细节:

show profile cpu,block io for query 8;


如下图为查询id=8的这条sql的执行细节,此处查询了cpublock io这两种类型,其他可以选择的类型在图的下面展示:

SQL执行具体细节


可以使用的类型如下:

ALL;显示所有的开销信息
BLOCK IO:显示块IO相关开销
CONTEXT SWITCHES:上下文切换相关开销
CPU:显示CPU相关开销
IPC:显示发送和接受相关开销
MEMORY:显示内存相关开销
PAGE FAULTS:显示页面错误相关开销
SOURCE:显示和Source_function, Source_file,Source_line相关的相关开销
SWAPS:显示交换次数相关开销

重点

看前面的图SQL执行具体细节,左边Status列展示了一条SQL执行的从开始到清理的整个生命周期中执行的操作。如果在其生命周期阶段出现如下的情况的就要重视了:

  1. converting HEAP to MyISAM :查询结果太大,内存都不够用了往磁盘上面搬了

  2. Creating tmp table :创建了临时表,先拷贝到临时表,用完后再删除

  3. Copying to tmp table on disk:把内存中的临时表复制到磁盘中,这个很耗性能

  4. locked :这个就是指在等待锁的意思
    可以看看如下Creating tmp table的样例

    Creating tmp table的样例

总结

开启Profiling后,mysql会留下15条最近执行的sql的现场, 便于我们发现问题。

Show profiles用来查最近的15条。

Show profile用来展示每一个SQL执行阶段的耗时清单,便于我们发现耗时最多的地方,然后以此为依据查找问题所在,最后优化SQL或者优化mysql参数。比如耗时清单创建了临时表,就要考虑表是否创建索引,如果创建了那么是否没有用到或者失效了。

总的来说Profiling是一个很不错的mysql性能分析工具。


版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

mysql中找出无用的索引或重复索引

背景MySQL允许在相同列上创建重复的索引,但这样做对数据库却是有害而无利的,需要定期检查此类重复索引以改善数据库性能。可减少磁盘空间占用、减少磁盘IO、减少优化器优化查询时需要比较的索引个数、减少数...

mysql中group by的实现与优化

mysql中group by的实现与优化

概念    由于 GROUP BY 实际上也同样需要进行排序操作,而且与 ORDER BY 相比,GROUP BY 主要只是多了 排序之后的分组操作。当然,如果在分组的时...

mysql中数据页的相关概念

mysql中数据页的相关概念

概念在 InnoDB 存储引擎中,所有的数据都被逻辑地存放在表空间中,表空间(tablespace)是存储引擎中最高的存储逻辑单位,在表空间的下面又包括段(segment)、区(extent)、页(p...

Mysql B+树索引常见面试题

Mysql B+树索引常见面试题

概念一个经典的B+树索引数据结构见下图:B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接。在B+树上的常规检索,从根节点到叶子节点的搜索效率基本相当...

mysql中行锁、两阶段锁协议、死锁以及死锁检测

mysql中行锁、两阶段锁协议、死锁以及死锁检测

行锁MySQL的行锁都是在引擎层实现的,但是 MyISAM 不支持行锁,意味着并发控制只能使用表锁,同一张表任何时刻只能被一个更新在执行,影响到业务并发度。InnoDB 是支持行锁的,这也是 MyIS...

mysql中优化器是如何选择索引的

一:概念  - 在 索引建立之后,一条语句可能会命中多个索引,这时,索引的选择,就会交由 优化器 来选择合适的索引。  - 优化器选择索引的目的,是找到一个最优的执行方案,并用最小的代价去执...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。