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跟踪记录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差不多就是这个功能。

细节功能要么用的非常非常频繁,然后自然会熟悉,要么就用的时候查一下。

MySQL5.7之后的performance_schema 替代 show profile

个人理解起来就是将原先存储在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语句在执行过程中的资源消耗信息了。

上面的两个sql,官当抄来的。

SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) asDuration, SQL_TEXTFROMperformance_schema.events_statements_history_longWHERE SQL_TEXT like ‘%select count(1) from test_table1%‘;SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) ASDurationFROMperformance_schema.events_stages_history_longWHERE 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/

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/wy123/p/6979499.html

mysql5.7.10 performance_schema_MySQL的show profile简介以及该功能在MySQL 5.7中performance_schema中的替代...相关推荐

  1. MySQL的show profile(已过时)简介以及该功能在MySQL 5.7中performance_schema中的替代

    本文出处:http://www.cnblogs.com/wy123/p/6979499.html show profile 命令用于跟踪执行过的sql语句的资源消耗信息,可以帮助查看sql语句的执行情 ...

  2. CentOS6.5-源码编译安装最新MySQL5.7.10

    接着使用YUM方式安装mysql后,本文将介绍下在CentOS6.5 64位虚拟机上通过编译源码安装MYSQL5.7.10服务. 环境: OS: CentOS6.5 x86_64 最小化安装 CPU: ...

  3. mysql5.7.10安装_MySQL5.7.10下载及安装及配置-阿里云开发者社区

    MySQL5.7.10下载及安装及配置 一.下载 自MySQL版本升级到5.7以后,其安装及配置过程和原来版本发生了很大的变化,下面详细介绍5.7版本MySQL的下载.安装及配置过程. 图1.1 My ...

  4. centos 6.2   为mysql5.6.10安装 HandlerSocket插件

    环境: 系统centos6.2 mysql版本mysql5.6.10 HandlerSocket插件版本 1.1.1 (mysql5.6.10安装1.0的插件报错) 1.1.1版本地址https:// ...

  5. mysql5.7.10源码安装_MySQL 5.7.10最新版本号源码安装具体过程

    1,下载地址: 能够wget下载,也能够在pc本地网页上下载完再远程传到linux上面去. 文档干货在这里: # Preconfiguration setup shell> groupadd m ...

  6. mysql 安全配置 centos_CentOS下安装MySQL5.6.10和安全配置教程详解

    注:以下所有操作都在CentOS 6.5 x86_64位系统下完成. #准备工作# 在安装MySQL之前,请确保已经使用yum安装了以下各类基础组件(如果系统已自带,还可以考虑yum update下基 ...

  7. mac下mysql5.7.10密码问题

    mysql5.7.10刚安装好,会生成一个随机密码. 如果没记住这个随机密码,那么到mysql/bin/下执行mysql_secure_installation命令 按照提示重置密码和其他选项. ps ...

  8. MySQL5.7.10多元复制功能搭建

    MySQL5.7.10多元复制功能搭建 1.环境:centos6.5 [root@mysql-m1 mysql-5.7.10]# cat /etc/redhat-release  CentOS rel ...

  9. win7 64bit下最新Apahe2.4.18+php7.0.2+MySQL5.7.10配置

    原文:win7 64bit下最新Apahe2.4.18+php7.0.2+MySQL5.7.10配置 一.说明 以前配置apache+php+mysql都是参考网上的,一般都没有什么问题.最近公司有个 ...

最新文章

  1. python装饰器_Python基础-装饰器
  2. loading窗口动画 web_分享web前端七款HTML5 Loading动画特效集锦
  3. python实现一个简单的tftp客户端
  4. JDK和JRE的区别和联系
  5. 3097: Hash Killer I
  6. 双硬盘安装Windows+Ubuntu
  7. linux中IGV的运行,IGV的使用
  8. 开放信息抽取(OIE)系统(一)--概述
  9. canvas教程10-绘制文本
  10. 2023.3.21日学习收获
  11. 三菱PLC以太网MC通讯协议模块
  12. vue单元测试SyntaxError: Unexpected token ‘export‘
  13. 什么是openshift
  14. 机器学习算法: 朴素贝叶斯算法
  15. 转载与积累系列 - Docker 核心技术与实现原理
  16. Vue2 -- 组件化
  17. luna16目标检测(记录)
  18. 计算机速算训练,5种速算技巧,比计算机“更神速”!值得收藏!
  19. wxMEdit 新增德文翻译
  20. 调用smooth函数进行加噪数据的平滑处理

热门文章

  1. 安装windowx64-mysql
  2. 香港城门隧道翻车意外酿一死16伤
  3. Linux安装Axis C构建WebService服务
  4. vue监听滚动事件,实现滚动监听
  5. Unity3D导出的EXE不用显示分辨率选择界面
  6. 差分硬盘的merge(合并差异)实验分析
  7. java ByteBuffer flip()和limit()的理解
  8. Spring 应用开发框架 Spring Boot 2.3.0 最新版本发布
  9. 未能正确加载“ProviderPackage”包。
  10. python人像和图片比对_python 使用OpenCV进行简单的人像分割与合成