MySQL之profiling性能分析(在5.6.14版本被丢弃)
官方建议使用information_schema.profiling。
原因是show profile 输出了查询执行的每个步骤及其花费的时间,但是结果很难快速确定哪个步骤花费的时间最多,因为输出是按照执行顺序排序的,而不是按花费的时间排序—-而时间上我们更关心的是花费了多少时间。
通过 Query Profiler 来定位一条 Query 的性能瓶颈,这里我们再详细介绍一下 Profiling 的用途及使用方法。
要想优化一条 Query,我们就需要清楚的知道这条 Query 的性能瓶颈到底在哪里,
是消耗的 CPU计算太多?
还是需要的的 IO 操作太多?
要想能够清楚的了解这些信息,在 MySQL 5.0 和 MySQL 5.1正式版中已经可以非常容易做到了,那就是通过 Query Profiler 功能。
MySQL 的 Query Profiler 是一个使用非常方便的 Query 诊断分析工具。
通过该工具可以获取一条Query 在整个执行过程中多种资源的消耗情况,如 CPU,IO,IPC,SWAP 等,以及发生的 PAGE FAULTS,CONTEXT SWITCHE 等等,同时还能得到该 Query 执行过程中 MySQL 所调用的各个函数在源文件中的位置。
下面我们看看 Query Profiler 的具体用法。
1、 开启 profiling 参数
mysql> set profiling=;
Query OK, rows affected (0.00 sec)
通过执行 “set profiling”命令,可以开启关闭 Query Profiler 功能。
2、 执行 Query
mysql> select * from users;
+----+--------+-----+-----+---------------------+---------------------+
| id | name | sex | age | created_at | updated_at |
+----+--------+-----+-----+---------------------+---------------------+
| | 李四 | 男 | | -- :: | -- :: |
| | 李老四 | 女 | | -- :: | -- :: |
| | 李老五 | 女 | | -- :: | -- :: |
| | 王老四 | 女 | | -- :: | -- :: |
| | 王老五 | 男 | | -- :: | -- :: |
| | 刘老七 | 男 | | -- :: | -- :: |
+----+--------+-----+-----+---------------------+---------------------+
rows in set (0.01 sec)
在开启 Query Profiler 功能之后,MySQL 就会自动记录所有执行的 Query 的 profile 信息了。
3、获取系统中保存的所有 Query 的 profile 概要信息
mysql> show profiles;
+----------+------------+---------------------+
| Query_ID | Duration | Query |
+----------+------------+---------------------+
| | 0.00103400 | SELECT DATABASE() |
| | 0.00019200 | select * from users |
| | 0.00011100 | set names gbk |
| | 0.00668550 | select * from users |
+----------+------------+---------------------+
rows in set (0.00 sec)
通过执行 “SHOW PROFILE” 命令获取当前系统中保存的多个 Query 的 profile 的概要信息。
可以看到MySQL为每一个操作生成了一个Query_ID,我们可以使用show profile for query 1这样的形式来查看第一条语句具体的执行过程分析。
4、针对单个 Query 获取详细的 profile 信息。
在获取到概要信息之后,我们就可以根据概要信息中的 Query_ID 来获取某个 Query 在执行过程中
详细的 profile 信息了,具体操作如下:
mysql> show profile for query ;
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| starting | 0.000481 |
| checking permissions | 0.000005 |
| Opening tables | 0.000004 |
| init | 0.000184 |
| optimizing | 0.000006 |
| executing | 0.000226 |
| end | 0.000004 |
| query end | 0.000001 |
| closing tables | 0.000002 |
| freeing items | 0.000080 |
| logging slow query | 0.000002 |
| cleaning up | 0.000040 |
+----------------------+----------+
rows in set (0.00 sec)
如果没有指定FOR QUERY,那么输出最近一条语句的信息。
可以看到MySQL为我们生成了操作在执行过程中每一个步骤所耗费的时间,通过profiling我们就可以查找出sql语句中耗时的地方,并加以优化。
5、
SHOW PROFILE TYPE FOR QUERY n
TYPE是可选的,取值范围可以如下:
- ALL 显示所有性能信息
 - BLOCK IO 显示块IO操作的次数
 - CONTEXT SWITCHES 显示上下文切换次数,不管是主动还是被动
 - CPU 显示用户CPU时间、系统CPU时间
 - IPC 显示发送和接收的消息数量
 - MEMORY [暂未实现]
 - PAGE FAULTS 显示页错误数量
 - SOURCE 显示源码中的函数名称与位置
 - SWAPS 显示SWAP的次数
 
例:
mysql> show profile cpu,block io for query ;
+----------------------+----------+----------+------------+--------------+---------------+
| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+----------------------+----------+----------+------------+--------------+---------------+
| starting | 0.000481 | 0.000000 | 0.000000 | NULL | NULL |
| checking permissions | 0.000005 | 0.000000 | 0.000000 | NULL | NULL |
| Opening tables | 0.000004 | 0.000000 | 0.000000 | NULL | NULL |
| init | 0.000184 | 0.000000 | 0.000000 | NULL | NULL |
| optimizing | 0.000006 | 0.000000 | 0.000000 | NULL | NULL |
| executing | 0.000226 | 0.000000 | 0.000000 | NULL | NULL |
| end | 0.000004 | 0.000000 | 0.000000 | NULL | NULL |
| query end | 0.000001 | 0.000000 | 0.000000 | NULL | NULL |
| closing tables | 0.000002 | 0.000000 | 0.000000 | NULL | NULL |
| freeing items | 0.000080 | 0.000000 | 0.000000 | NULL | NULL |
| logging slow query | 0.000002 | 0.000000 | 0.000000 | NULL | NULL |
| cleaning up | 0.000040 | 0.000000 | 0.000000 | NULL | NULL |
+----------------------+----------+----------+------------+--------------+---------------+
rows in set (0.00 sec)
上面的例子中是获取 CPU 和 Block IO 的消耗,非常清晰,对于定位性能瓶颈非常适用。
以下状态解释来自网络博客:

6、获取所有信息
mysql> SHOW PROFILE ALL FOR QUERY 1; 等价于 mysql> SELECT * FROM information_schema.profiling WHERE query_id = 1 ORDER BY seq;
大概只有在孩提时代的我们才会有远大的目标吧。
MySQL之profiling性能分析(在5.6.14版本被丢弃)的更多相关文章
- mysql(4):性能分析和性能优化
		
性能分析 慢查询日志分析 ①查询慢查询日志的状态 show global variables like '%slow_query_log%'; ②开启慢查询日志(当mysql重启时会重置) set g ...
 - MySQL监控、性能分析——工具篇
		
https://blog.csdn.net/leamonjxl/article/details/6431444 MySQL越来越被更多企业接受,随着企业发展,MySQL存储数据日益膨胀,MySQL的性 ...
 - MySQL监控、性能分析——工具篇(转载)
		
MySQL越来越被更多企业接受,随着企业发展,MySQL存储数据日益膨胀,MySQL的性能分析.监控预警.容量扩展议题越来越多.“工欲善其事,必先利其器”,那么我们如何在进行MySQL性能分析.监控预 ...
 - MySQL数据库的性能分析 ---图书《软件性能测试分析与调优实践之路》-手稿节选
		
1 .MySQL数据库的性能监控 1.1.如何查看MySQL数据库的连接数 连接数是指用户已经创建多少个连接,也就是MySQL中通过执行 SHOW PROCESSLIST命令输出结果中运行着的线程 ...
 - Mysql内置的profiling性能分析工具
		
要想优化一条 Query,我们就需要清楚的知道这条 Query 的性能瓶颈到底在哪里,是消耗的 CPU计算太多,还是需要的的 IO 操作太多?要想能够清楚的了解这些信息,在 MySQL 5.0 和 M ...
 - Mysql优化_内置profiling性能分析工具
		
如果要进行SQL的调优优化和排查,第一步是先让故障重现,但是这个并不是这一分钟有问题,下一秒就OK.一般的企业一般是DBA数据库工程师从监控里找到问题.DBA会告诉我们让我们来排查问题,那么可能很多种 ...
 - Mysql自带profiling性能分析工具使用分享
		
1. show variables like '%profiling%';(查看profiling信息) 2. set profiling=1;(开启profiling) 3. 执行S ...
 - mysql索引的性能分析
		
[前言]上一篇博客介绍了InnoDB引擎的索引机制,主要围绕B+树的建立,目录项记录里主键和页号,到页目录下的二分法定位数据:二级索引里的主键和索引列,及其回表操作.这一篇分析一下索引的性能,围绕如何 ...
 - [MongoDB]Profiling性能分析
		
摘要 上篇文章介绍了mapReduce这个聚合操作.本篇将继续学习,db有了,collection和document也有,基本上够用了,但是随着项目上线后,发现业务数据越来越多,查询效率越来越慢,这时 ...
 
随机推荐
- 适合长期英语学习的电视、电台、podcast节目有哪些?
			
1.Stuff You Should Know 非常有名的一个节目 直接在度娘搜索第一个就是官网,里面有videos和podcasts两种 Postcasts有特别多种类的主题, 每期介绍一个主题, ...
 - linux系统中RAID5磁盘冗余阵列配置(5块磁盘)
			
RAID5:需要至少三块(含)硬盘,兼顾存储性能.数据安全和储存成本. 如图所示”parity”块中保存的是其他硬盘数据的奇偶校验信息(并非其他硬盘的数据),以数据的奇偶校验信息来保证数据的安全,RA ...
 - java根据模板生成pdf
			
原文链接:https://www.cnblogs.com/wangpeng00700/p/8418594.html 在网上看了一些Java生成pdf文件的,写的有点乱,有的不支持写入中文字体,有的不支 ...
 - BeginLinux Programming chapter16: X11桌面系统简介
			
当前两个最流行的linux desktop environment: GNOME 和KDE, 两者对应的图形库分别是 GTK+ 和 QT. GNOME与KDE与X11的关系: X defines no ...
 - go 相关资源
			
网站guide 官方文档 国内镜像 包下载 Golang标准库文档 Release History Getting Start 安装 1.下载binrary包(zip 解压后需要配置gopath, m ...
 - spring cloud微服务实践四
			
spring cloud的hystrix还有一个配搭的库hystrix-dashboard,它是hystrix的一款监控工具,能直观的显示hystrix响应信息,请求成功率等.但是hystrix-da ...
 - 使用RabbitMQ实现分布式事务
			
RabbitMQ解决分布式事务思路: 案例: 经典案例,以目前流行点外卖的案例,用户下单后,调用订单服务,让后订单服务调用派单系统通知送外卖人员送单,这时候订单系统与派单系统采用MQ异步通讯. Rab ...
 - 使用github经验
			
使用github经验 良好的使用习惯,就像是每天来看朋友圈一样,不一定每天都有东西要提交,但是一定要一直有一个 repository 在维护,持续的提交代码.同时也要注意自己的 repository的 ...
 - 16-MySQL DBA笔记-调优基础理论和工具
			
第五部分 性能调优与架构篇 本篇将为读者介绍性能调优的一些背景知识和理论,然后介绍一些工具的运用,最后介绍从应用程序到操作系统.到数据库.到存储各个环节的优化. 性能调优是一个高度专业的领域,它需要一 ...
 - Java Convention 公约数计算
			
Java Convention 公约数计算 /** * <html> * <body> * <P> Copyright 1994-2018 JasonInterna ...