-
Notifications
You must be signed in to change notification settings - Fork 111
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计算的比率来预估某个阶段总体完成百分比
- 表中的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表
- 验证、测试、整理:罗小波
- QQ:309969177
- 提示:本系列文章的主体结构遵循Oracle MySQL 官方 5.7 手册中,关于information_schema、mysql schema、performance_schema、sys schema的章节结构体系,并额外添加了一些验证、测试数据。鉴于本人精力和能力有限,难免出现一些纰漏,欢迎大家踊跃指正!