MySQL的show profile(已过时)简介以及该功能在MySQL 5.7中performance_schema中的替代
本文出处:http://www.cnblogs.com/wy123/p/6979499.html
show profile 命令用于跟踪执行过的sql语句的资源消耗信息,可以帮助查看sql语句的执行情况,可以在做性能分析或者问题诊断的时候作为参考。
在MySQL5.7中, show profile 命令已经开始不推荐使用,MySQL使用performance_schema 中系统表的信息来替代show profile命令
本文简单介绍一下MySQL的profile使用,以及在MySQL5.7之后的改进,同时与SQL Server中的DMV以及profile和扩展事件做一个简单的对比,
最后会发现,在MySQL和SQL Server中这个信息反映出来的指标都和以及参考作用,都是类似的。
MySQL5.7尚且支持的show profile
show profile在MySQ L5.7之后就开始是一个过时的选项,不过MySQL 5.7尚且支持,不过不建议使用。show profile跟踪记录SQL执行情况的需要打开配置才能使用

测试执行数次“select count(1) from test_table1;”这个SQL语句,查看执行过的sql的QUERY_ID

然后查看具体的某一个query_id的执行过程

然后可以查看某一个query(执行过的SQL语句)的某一方面的资源消耗信息。
比如show profile cpufor query 82或者是show profile all for query 82;

或者是show profile all for query 82。更多show profile的参数请参考各种参考资料以及官方文档。

show profile中记录的信息实际上是存储在INFORMATION_SCHEMA.PROFILING 这个系统表中的,
各种show profile只不过是相当于一个马甲,换一种方式来展现INFORMATION_SCHEMA.PROFILING 中的信息。
实话讲,个人是不太喜欢系统类似的封装命令的,倒不如自己直接去定义查询条件去查询系统表本身来的更加实在。

MySQL的show profile差不多就是这个功能。
细节功能要么用的非常非常频繁,然后自然会熟悉,要么就用的时候查一下。
-- 打开当前Session的profiling
set profiling = 1; -- 查询最近一个查询的profiling信息
show profile; -- 查询所有的profile信息
show profiles; -- 查询某个Id的profile信息
show profile for query 5; -- 查询某个Id的profile指定信息
show profile cpu for query 5;
MySQL5.7之后的performance_schema 替代 show profile
首先参考官方文档https://dev.mysql.com/doc/refman/5.7/en/performance-schema-query-profiling.html
个人理解起来就是将原先存储在INFORMATION_SCHEMA.PROFILING系统表中的信息换了一个存储的方式个位置。
这个过程也是支持可配置化的,首先看 performance_schema.setup_actors这个系统表,默认情况下是开启了profile跟踪记录的。

可以在全局级关闭profile记录跟踪的功能,而只限定某一个账号的执行记录被跟踪

这里就重新建账号了,重现打开默认情况下记录所有账号的跟踪。
然后根据官网的提示,需要打开一个配置选项才能正常记录profile信息。
执行如下sql。
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME LIKE '%statement/%'; UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME LIKE '%stage/%'; UPDATE performance_schema.setup_consumers SET ENABLED = 'YES'
WHERE NAME LIKE '%events_statements_%'; UPDATE performance_schema.setup_consumers SET ENABLED = 'YES'
WHERE NAME LIKE '%events_stages_%';
继续使用上述的sql查询语句(select count(1) from test_table1)做测试,
然后系统表performance_schema.events_statements_history_long 中可以根据文本信息模糊匹配出之前执行过的SQL语句的信息了

根据上述匹配到的sql语句的Event_id就可以查询到这个SQL语句在执行过程中的资源消耗信息了。

SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration, SQL_TEXT
FROM performance_schema.events_statements_history_long
WHERE SQL_TEXT like '%select count(1) from test_table1%'; SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration
FROM performance_schema.events_stages_history_long
WHERE NESTING_EVENT_ID=544102;
但是performance_schema 系统表中记录到的信息,并不能像show profile cpu for query *** 一样,查询出来某一类资源的消耗情况。
本身还没有搜索到相关的等价于show profile cpu for query *** 的系统表,有知道的还望告知,谢谢。
到时某些资料上有这么一说,在performance_schema 系统表记录到的信息中:“Does not cover all metrics compared to the native profiling i.e. CONTEXT SWITCHES, BLOCK IO, SWAPS”
也就说相比之前版本的show profile,新的记录profile的方式还是有待完善的,不知道到目前为止有没有完善这个功能。
参考:https://www.percona.com/blog/2015/04/16/profiling-mysql-queries-from-performance-schema/
格式化个时间都费劲巴拉的
--历史记录数据量的配置
show variables like 'performance_schema%history%size'; SELECT
EVENT_ID,
date_sub(now(),INTERVAL (select VARIABLE_VALUE from information_schema.global_status where variable_name='UPTIME')-TIMER_START*10e-13 second) `start_time` ,
date_sub(now(),INTERVAL (select VARIABLE_VALUE from information_schema.global_status where variable_name='UPTIME')-timer_end*10e-13 second) `start_time` ,
TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration,
SQL_TEXT
FROM performance_schema.events_statements_history_long
WHERE SQL_TEXT like '%test_mrr%'; SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration
FROM performance_schema.events_stages_history_long
WHERE NESTING_EVENT_ID=48903;
MySQL中的show profile中的信息大概就是这样子,
参考了一下《深入浅出MySQL》发现提到的show profile在执行的执行给出了警告,表明后续版本中可能会移除这个功能,因此又搜索show profile的替代者。
MySQL的profile信息与SQL Server中的profile简单的对比
最后简单地与sqlserver系统表DMV中的类似功能做一下比较,还是有一些比较相似的地方的。
SQL Server可以通过DMV来查询执行过的SQL的一些信息,比如执行的时间,消耗的CPU时间,执行的逻辑读写,物理读写等等
不过这个结果还是有一些不一样的,下面再说。

上述MySQL统计出来的是一个结果强调的是步骤与时间的维度,也即每一步花费了多少时间,
这里的sqlserver统计出来的是一个整体消耗信息
如果sqlserver想到达到类似也是可以的,最简单的就是SQL Server中的profile跟踪结果,也叫profile,看来套路都是一样的,
另外就是sqlserver中改良过来的扩展事件,参考之前的博文:http://www.cnblogs.com/wy123/p/6835939.html
完全可以拿到Session级别的等待资源和等待时间,这样子基本上就等同于MySQL中的performance_schema记录到的信息了。
不过SQL Server 扩展事件捕获到的这个信息要比MySQL的原始的Profile中INFORMATION_SCHEMA.PROFILING 的更加具体和详尽了。
在资源消耗和时间维度上有一个更加清晰和直观的结果。
比如如下的这个截图,还是那句话,套路都是一样的,换了个马甲而已。

如果把扩展事件捕获到的上述结果,统计起来看,就更像MySQL中的profile信息了。

总结:
profile跟踪结果可以反馈出来sql执行过程中的资源消耗信息,以提供在做性能优化或者是问题诊断过程中的参考依据,作为DBA在管理和优化数据中的工具
不管是在MySQL中,还是在SQL Server中,功能都是类似的。
当然在问题诊断的时候,仅仅有这些信息,还是不完全够的,需要其他方面的一些信息做综合考量。
更多详细信息,参考:http://www.cnblogs.com/zhoujinyi/p/5236705.html
MySQL的show profile(已过时)简介以及该功能在MySQL 5.7中performance_schema中的替代的更多相关文章
- MySQL 8.0 正式版 8.0.11 发布:比 MySQL 5.7 快 2 倍
ySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 注意:从 MySQL 5.7 升级到 MySQL 8. ...
- MySQL 5.7中 performance_schema 替代 show profile 命令
本文出处:http://www.cnblogs.com/wy123/p/6979499.html show profile 命令用于跟踪执行过的sql语句的资源消耗信息,可以帮助查看sql语句的执行情 ...
- 《MySQL必知必会》简介、使用
2.MySQL简介 2.1 什么是MySQL 我们在前一-章中介绍了数据库和SQL.正如所述,数据的所有存储. 检索.管理和处理实际上是由数据库软件一 DBMS (数据库管理系统) 完成的. MySQ ...
- UnityPlayerActivity.java使用或覆盖了已过时的 API。
Root\Temp\gradleOut\unityLibrary\src\main\java\com\unity3d\player\UnityPlayerActivity.java使用或覆盖了已过时的 ...
- MyBatis学习(一)、MyBatis简介与配置MyBatis+Spring+MySql
一.MyBatis简介与配置MyBatis+Spring+MySql 1.1MyBatis简介 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的J ...
- 解决Maven项目编译时提示:源值1.5已过时,将在未来所有版本中删除
每次编译项目时,都提示:源值1.5已过时,将在未来所有版本中删除 查了一些资料,发现是因为IDEA默认把项目的源代码版本设置为jdk1.5,目标代码设置为jdk1.5 解决方案: 修改Maven的S ...
- 某些输入文件使用或覆盖了已过时的 API
android出现注: 某些输入文件使用或覆盖了已过时的 API. 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译. 注: 某些输入文件使用了未经检查或不安全的操作. 注 ...
- 【转】android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。 注
使用Android studio打包应用程序出现如下错误: 注: 某些输入文件使用或覆盖了已过时的 API. 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译. 注: 某些 ...
- MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
目录(?)[-] 一MyBatis简介与配置MyBatisSpringMySql MyBatis简介 MyBatisSpringMySql简单配置 搭建Spring环境 建立MySql数据库 搭建My ...
随机推荐
- lettuce行为驱动框架实例
练习: 一:e1_MyFirstBDD 使用方法的方式实现阶乘的计算 zero.feature: Feature: Compute factorial In order to play with Le ...
- Win10+Ubuntu双系统删除Ubuntu方法
前情提要 Win10下试了许多种方法,什么MbrFix.EasyBCD.亦或是Boot Option.都不行.前两者不行,操作之后重启无法直接进入Windows,后者也不行,找不到所谓的Delete ...
- jsonify
在flask中通过响应,将json数据显示在网页中,并且将Content-Type该为application/json格式 1,第一种方法: from flask import jsonify @ap ...
- OpenCV中图像的格式Mat 图像深度
opencv中图像的格式Mat 有图像的定义,图像深度.类型格式等,其中Mat的参数depth为深度,深度反应出图像颜色像素值: 关于数据的储存:(转) Mat_<uchar>对应的是CV ...
- 解决eclipse高版本JDK编译的项目到低版本JDK服务器上不能运行的问题
错误提示信息:Unsupported major.minor version 52.0,意思是说,当前jdk的版本不支持更高版本jdk编译出来的class文件. 我的编译环境,eclipse使用的是j ...
- 与C/C++关键字extern有关的原理
关键字有一定的语义,但是用法不唯一. 对于C/C++语言的预编译.编译.汇编.链接.我相信大家在接触C++一年不到就背的滚瓜烂熟,但是其中的细节,是后来才慢慢想明白的.为什么我不讲extern关键字呢 ...
- day 41 标准文档流 浮动
一.标准文档流 什么是标准文档流 宏观的将,我们的web页面和ps等设计软件有本质的区别,web 网页的制作,是个“流”,从上而下 ,像 “织毛衣”.而设计软件 ,想往哪里画东西,就去哪里画 标准文档 ...
- 第一章 HTML+CSS(上)
HTML 网页的组成 HTML简介 HTML的语法 HTML的常用标签 HTML中的表格和表单 CSS的简单应用 我们这里使用WebStorm开发工具 配置浏览器 常用插件: CodeGlance 代 ...
- Vue的理解:Vue.js新手入门指南----转
最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在 ...
- PPTV(pplive)_forap_1084_9993.exe 木马清除经历
## 流氓行经 这几天电脑上突然自动安装pptv,金山毒霸清除了也不管用, 卸载了pptv过一会又自动安装上了,太嚣张了哈. ## 监控进程跟目录变化 接下来使用 ProcessMonitor 监控进 ...