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语句在执行过程中的资源消耗信息了。
上面的两个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/
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
转载于:https://www.cnblogs.com/wy123/p/6979499.html
MySQL的show profile(已过时)简介以及该功能在MySQL 5.7中performance_schema中的替代相关推荐
- mysql5.7.10 performance_schema_MySQL的show profile简介以及该功能在MySQL 5.7中performance_schema中的替代...
show profile 命令用于跟踪执行过的sql语句的资源消耗信息,可以帮助查看sql语句的执行情况,可以在做性能分析或者问题诊断的时候作为参考. 在MySQL5.7中, show profile ...
- MySQL 8.0 正式版 8.0.11 发布:比 MySQL 5.7 快 2 倍
转载:https://www.oschina.net/news/95325/mysql-8-0-ga-released MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 ...
- swing程序 过时拉嘛_密码已过时-如何保护您的应用程序和保护用户
swing程序 过时拉嘛 重点 (Top highlight) I've said this part before, so if you read the previous article, ski ...
- IntelliJ IDEA 源值1.5已过时,将在未来所有版本中删除
转载自 IntelliJ IDEA 源值1.5已过时,将在未来所有版本中删除 原因: IDEA默认把项目的源代码版本设置为jdk1.5,目标代码设置为jdk1.5 解决方案: 1修改Maven的Se ...
- 【DB宝40】MySQL高可用管理工具Orchestrator简介及测试
文章目录 一.Orchestrator简介 二.快速搭建Orchestrator环境 三.添加主从环境 四.修改集群别名 五.拖动界面修改主从关系 六.自动failover 一.Orchestrato ...
- mysql ver 14.14下载_MySQL简介及安装 mysql Ver 14.14 Distrib 5.7.28
1.MySQL简介 1.数据库产品演变 第一代数据库架构: RDBMS 关系型数据库时代 : 合的时代 代表产品 :Oracle .MSSQL .MySQL.SQL server 第二代数据库架构:拆 ...
- IDEA中提示:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除
问题描述: 运行Java Web项目时,IDEA中提示:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除 解决方法: 1. 打开[File]-[Project Structur ...
- C# “Thread类Suspend()与Resume()已过时” 解决方法(利用ManualResetEvent类)
C# "Thread类Suspend()与Resume()已过时" 解决方法(利用ManualResetEvent类) 参考文章: (1)C# "Thread类Suspe ...
- 仍在警告:配置“编译”已过时,并已由“实现”代替
本文翻译自:Still getting warning : Configuration 'compile' is obsolete and has been replaced with 'implem ...
最新文章
- Syslog-ng+Rsyslog收集日志:logrotate日志切割、轮询(七)
- 项目的命名规范,为以后的程序开发中养成良好的行为习惯
- 实验8-SPSS交叉表分析
- 成功解决TypeError: __init__() got an unexpected keyword argument 'serialized_options'
- Spartan-6 FPGA SelectIO Resources User Guide 笔记2 SelectIO Attributes/Constraints
- 经典排序算法(8)——归并排序算法详解
- mysql 解释 游标赋值_Mysql_游标
- java中number类型能否相除_Java中 如果复数类成员是int型,怎么实现两个复数相除...
- oracle存储过程没有返回值,Java调用Oracle存储过程(无返回值)
- react 绑定 箭头函数_为什么箭头函数和React渲染中的绑定有问题
- (89)多周期时序约束(四)
- Windows Print Spooler服务最新漏洞CVE-2021-34527详解
- PaddleOCR-release-2.3\deploy\cpp_infer\src识别中文时出现乱码
- Redhat Linux安装JDK 1.7
- 分享一份接口测试项目(非常值得练手)
- html5与access连接数据库操作,access是一个什么数据库?
- 系统架构师--考试大纲
- golang读取EXIF orientation标记
- 【HDU 5755】Gambler Bo(高斯消元)
- 别费劲找站长工具共享VIP了 这个工具也不错
热门文章
- java button jbutton_java程序将Button改成JButton,该如何改?
- 获取 NodeJS 程序退出码
- Win2008使用WEB方式更改工作组计算机用户帐户密码
- java中怎么判断返回200_java – 从Spring REST API返回HTTP代码200
- [文摘20100706】软件架构师应该知道的97件事
- 帮肋营销人员建立策略思考能力
- java 去除html中img_JAVA去除HTML标签
- android uri转file_Android世界:ContentProvider使用
- 计算机中如何取消家长控制用户,电脑怎么设置家长控制? 家长控制功能的使用技巧...
- 读《编码-藏匿在计算机软硬件背后的语言》有感