Skip to content

events_stages_current

xiaoboluo768 edited this page Jun 8, 2020 · 4 revisions
  • events_stages_current表包含当前阶段事件的监控信息,每个线程一行记录显示线程正在执行的阶段事件的状态

  • 在包含stage事件记录的表中,events_stages_current是基准表,包含stage事件记录的其他表(如:events_stages_history和events_stages_history_long表)的数据在逻辑上都来自events_stages_current表(摘要表除外)

  • events_stages_current表字段详解:

    • THREAD_ID,EVENT_ID:与事件关联的线程ID和当前事件ID,可以使用THREAD_ID和EVENT_ID列值来唯一标识该行,这两行的值作为组合条件时不会出现相同的数据行
    • END_EVENT_ID:当一个事件开始执行时,对应行记录的该列值被设置为NULL,当一个事件执行结束时,对应的行记录的该列值被更新为该事件的ID
    • EVENT_NAME:产生事件的instruments的名称。该列值来自setup_instruments表的NAME值。instruments名称可能具有多个部分并形成层次结构,如:"stage/sql/Slave has read all relay log; waiting for more updates",其中stage是顶级名称,sql是二级名称,Slave has read all relay log; waiting for more updates是第三级名称。详见链接:https://dev.mysql.com/doc/refman/5.7/en/performance-schema-instrument-naming.html
    • SOURCE:源文件的名称及其用于检测该事件的代码位于源文件中的行号
    • TIMER_START,TIMER_END,TIMER_WAIT:事件的时间信息。这些值的单位是皮秒(万亿分之一秒)。 TIMER_START和TIMER_END值表示事件的开始时间和结束时间。TIMER_WAIT是事件执行消耗的时间(持续时间)
      • 如果事件未执行完成,则TIMER_END为当前时间,TIMER_WAIT为当前为止所经过的时间(TIMER_END - TIMER_START)。
      • 如果instruments置表setup_instruments中对应的instruments 的TIMED字段被设置为 NO,则该instruments禁用时间收集功能,那么事件采集的信息记录中,TIMER_START,TIMER_END和TIMER_WAIT字段值均为NULL
      • 关于事件时间单位以及可以设置的有效时间单位,请参见链接:https://dev.mysql.com/doc/refman/5.7/en/performance-schema-timing.html
    • WORK_COMPLETED,WORK_ESTIMATED:这些列提供了阶段事件进度信息
      • 表中的WORK_COMPLETED和WORK_ESTIMATED两列,它们共同协作显示每一行的进度显示:
        • 1)、WORK_COMPLETED:显示阶段事件已完成的工作单元数
        • 2)、WORK_ESTIMATED:显示预计阶段事件将要完成的工作单元数
      • 如果instruments没有提供进度相关的功能,则该instruments执行事件采集时就不会有进度信息显示,WORK_COMPLETED和WORK_ESTIMATED列都会显示为NULL。如果进度信息可用,则进度信息如何显示取决于instruments的执行情况。performance_schema表提供了一个存储进度数据的容器,但不会假设你会定义何种度量单位来使用这些进度数据:
        • 1)、“工作单元”是在执行过程中随时间增加而增加的整数度量,例如执行过程中的字节数、行数、文件数或表数。对于特定instruments的“工作单元”的定义留给提供数据的instruments代码
        • 2)、WORK_COMPLETED值根据检测的代码不同,可以一次增加一个或多个单元
        • 3)、WORK_ESTIMATED值根据检测代码,可能在阶段事件执行过程中发生变化
      • 阶段事件进度指示器的表现行为有以下几种情况:
        • 1)、instruments不支持进度:没有可用进度数据, WORK_COMPLETED和WORK_ESTIMATED列都显示为NULL
        • 2)、instruments支持进度但对应的工作负载总工作量不可预估(无限进度):只有WORK_COMPLETED列有意义(因为他显示正在执行的进度显示),WORK_ESTIMATED列此时无效,显示为0,因为没有可预估的总进度数据。通过查询events_stages_current表来监视会话,监控应用程序到目前为止执行了多少工作,但无法报告对应的工作是否接近完成
        • 3)、instruments支持进度,总工作量可预估(有限进度):WORK_COMPLETED和WORK_ESTIMATED列值有效。这种类型的进度显示可用于online DDL期间的copy表阶段监视。通过查询events_stages_current表,可监控应用程序当前已经完成了多少工作,并且可以通过WORK_COMPLETED / WORK_ESTIMATED计算的比率来预估某个阶段总体完成百分比
    • NESTING_EVENT_ID:事件的嵌套事件EVENT_ID值(父事件ID)。
    • NESTING_EVENT_TYPE:嵌套事件类型。有效值为:为TRANSACTION,STATEMENT,STAGE,WAIT。阶段事件的嵌套事件通常是statement
  • 对于events_stages_current表允许使用TRUNCATE TABLE语句来进行清理

  • 示例:对于需要使用COPY方式执行的online ddl,那么需要copy的数据量是一定的,可以明确的,so。。这就可以为"stage/sql/copy to tmp table stage" instruments提供一个有结束边界参照的进度数据信息,这个instruments所使用的工作单元就是需要复制的数据行数,此时WORK_COMPLETED和WORK_ESTIMATED列值都是有效的可用的,两者的计算比例就表示当前copy表完成copy的行数据百分比。

    • 要查看copy表阶段事件的正在执行的进度监视功能,需要打开相关的instruments和consumers,然后查看events_stages_current表,如下:
# 配置相关instruments和consumers

UPDATE setup_instruments SET ENABLED='YES' WHERE NAME='stage/sql/copy to tmp table';
UPDATE setup_consumers SET ENABLED='YES' WHERE NAME LIKE 'events_stages_%';

# 然后在执行ALTER TABLE语句期间,查看events_stages_current表
  • 表记录内容示例
admin@localhost : performance_schema 10:49:37> select * from events_stages_current\G;
*************************** 1. row ***************************
        THREAD_ID: 47
          EVENT_ID: 249
      END_EVENT_ID: NULL
        EVENT_NAME: stage/sql/Sending data
            SOURCE: sql_executor.cc:195
      TIMER_START: 7962789241680000
        TIMER_END: 7962789272065000
        TIMER_WAIT: 30385000
    WORK_COMPLETED: NULL
    WORK_ESTIMATED: NULL
  NESTING_EVENT_ID: 239
NESTING_EVENT_TYPE: STATEMENT
1 row in set (0.00 sec)
  • 表定义语句
CREATE TABLE `events_stages_current` (
  `THREAD_ID` bigint(20) unsigned NOT NULL,
  `EVENT_ID` bigint(20) unsigned NOT NULL,
  `END_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
  `EVENT_NAME` varchar(128) NOT NULL,
  `SOURCE` varchar(64) DEFAULT NULL,
  `TIMER_START` bigint(20) unsigned DEFAULT NULL,
  `TIMER_END` bigint(20) unsigned DEFAULT NULL,
  `TIMER_WAIT` bigint(20) unsigned DEFAULT NULL,
  `WORK_COMPLETED` bigint(20) unsigned DEFAULT NULL,
  `WORK_ESTIMATED` bigint(20) unsigned DEFAULT NULL,
  `NESTING_EVENT_ID` bigint(20) unsigned DEFAULT NULL,
  `NESTING_EVENT_TYPE` enum('TRANSACTION','STATEMENT','STAGE','WAIT') DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8 

上一篇: events_waits_history_long表 | 下一篇: events_stages_history表

Clone this wiki locally