当前位置:Gxlcms > 数据库问题 > MySQL的show profile简介以及该功能在MySQL 5.7中performance_schema中的替代

MySQL的show profile简介以及该功能在MySQL 5.7中performance_schema中的替代

时间:2021-07-01 10:21:17 帮助过:4人阅读

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中,功能都是类似的。
  当然在问题诊断的时候,仅仅有这些信息,还是不完全够的,需要其他方面的一些信息做综合考量。

MySQL的show profile简介以及该功能在MySQL 5.7中performance_schema中的替代

标签:height   file   pre   rom   https   form   inf   通过   逻辑   

人气教程排行