• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 位置: MySQL 8 中文手册 -> MySQL 性能模式

    性能架构阶段事件表

    Performance Schema记录了阶段,这是语句执行过程中的步骤,例如,解析语句,打开表或执行filesort操作。阶段对应SHOW PROCESSLISTINFORMATION_SCHEMA.PROCESSLIST表中显示或可见的线程状态。状态值更改时,阶段开始和结束。

    在事件层次结构中,等待事件嵌套在阶段事件内,嵌套在语句事件内,嵌套在事务事件内。

    这些表存储阶段事件:

    • events_stages_current:每个线程的当前阶段事件。
    • events_stages_history:每个线程已结束的最近阶段事件。
    • events_stages_history_long:全局(在所有线程中)结束的最近阶段事件。

    以下各节描述了阶段事件表。也有汇总表,汇总有关舞台事件的信息。请参见“阶段摘要表”。

    有关三个阶段事件表之间关系的更多信息,请参见“当前事件和历史事件的性能架构表”。

    配置舞台事件收集

    要控制是否收集舞台事件,请设置相关工具和使用者的状态:

    • setup_instruments表包含名称以开头的乐器stage。使用这些工具可以启用或禁用各个阶段事件类的收集。
    • setup_consumers表包含具有与当前和历史阶段事件表名称相对应的名称的使用者值。使用这些使用者来筛选阶段事件的集合。

    除了提供语句进度信息的那些工具外,默认情况下禁用阶段工具。例如:

    mysql> SELECT NAME, ENABLED, TIMED
           FROM performance_schema.setup_instruments
           WHERE NAME RLIKE 'stage/sql/[a-c]';
    +----------------------------------------------------	+---------	+-------	+
    | NAME	| ENABLED	| TIMED	|
    +----------------------------------------------------	+---------	+-------	+
    | stage/sql/After create	| NO	| NO	|
    | stage/sql/allocating local table	| NO	| NO	|
    | stage/sql/altering table	| NO	| NO	|
    | stage/sql/committing alter table to storage engine	| NO	| NO	|
    | stage/sql/Changing master	| NO	| NO	|
    | stage/sql/Checking master version	| NO	| NO	|
    | stage/sql/checking permissions	| NO	| NO	|
    | stage/sql/cleaning up	| NO	| NO	|
    | stage/sql/closing tables	| NO	| NO	|
    | stage/sql/Connecting to master	| NO	| NO	|
    | stage/sql/converting HEAP to MyISAM	| NO	| NO	|
    | stage/sql/Copying to group table	| NO	| NO	|
    | stage/sql/Copying to tmp table	| NO	| NO	|
    | stage/sql/copy to tmp table	| NO	| NO	|
    | stage/sql/Creating sort index	| NO	| NO	|
    | stage/sql/creating table	| NO	| NO	|
    | stage/sql/Creating tmp table	| NO	| NO	|
    +----------------------------------------------------	+---------	+-------	+
    

    提供语句进度信息的阶段事件工具默认情况下处于启用和定时状态:

    mysql> SELECT NAME, ENABLED, TIMED
           FROM performance_schema.setup_instruments
           WHERE ENABLED='YES' AND NAME LIKE "stage/%";
    +------------------------------------------------------	+---------	+-------	+
    | NAME	| ENABLED	| TIMED	|
    +------------------------------------------------------	+---------	+-------	+
    | stage/sql/copy to tmp table	| YES	| YES	|
    | stage/sql/Applying batch of row changes (write)	| YES	| YES	|
    | stage/sql/Applying batch of row changes (update)	| YES	| YES	|
    | stage/sql/Applying batch of row changes (delete)	| YES	| YES	|
    | stage/innodb/alter table (end)	| YES	| YES	|
    | stage/innodb/alter table (flush)	| YES	| YES	|
    | stage/innodb/alter table (insert)	| YES	| YES	|
    | stage/innodb/alter table (log apply index)	| YES	| YES	|
    | stage/innodb/alter table (log apply table)	| YES	| YES	|
    | stage/innodb/alter table (merge sort)	| YES	| YES	|
    | stage/innodb/alter table (read PK and internal sort)	| YES	| YES	|
    | stage/innodb/buffer pool load	| YES	| YES	|
    | stage/innodb/clone (file copy)	| YES	| YES	|
    | stage/innodb/clone (redo copy)	| YES	| YES	|
    | stage/innodb/clone (page copy)	| YES	| YES	|
    +------------------------------------------------------	+---------	+-------	+
    

    默认情况下,禁用阶段使用者:

    mysql> SELECT *
           FROM performance_schema.setup_consumers
           WHERE NAME LIKE 'events_stages%';
    +----------------------------	+---------	+
    | NAME	| ENABLED	|
    +----------------------------	+---------	+
    | events_stages_current	| NO	|
    | events_stages_history	| NO	|
    | events_stages_history_long	| NO	|
    +----------------------------	+---------	+
    

    要在服务器启动时控制阶段事件收集,请在my.cnf文件中使用以下行:

    • 启用:

      [mysqld]
      performance-schema-instrument='stage/%=ON'
      performance-schema-consumer-events-stages-current=ON
      performance-schema-consumer-events-stages-history=ON
      performance-schema-consumer-events-stages-history-long=ON
      
    • 禁用:

      [mysqld]
      performance-schema-instrument='stage/%=OFF'
      performance-schema-consumer-events-stages-current=OFF
      performance-schema-consumer-events-stages-history=OFF
      performance-schema-consumer-events-stages-history-long=OFF
      

    要在运行时控制阶段事件收集,请更新setup_instrumentssetup_consumers表:

    • 启用:

      UPDATE performance_schema.setup_instruments
      SET ENABLED = 'YES', TIMED = 'YES'
      WHERE NAME = 'stage/%';
      
      UPDATE performance_schema.setup_consumers
      SET ENABLED = 'YES'
      WHERE NAME LIKE 'events_stages%';
      
    • 禁用:

      UPDATE performance_schema.setup_instruments
      SET ENABLED = 'NO', TIMED = 'NO'
      WHERE NAME = 'stage/%';
      
      UPDATE performance_schema.setup_consumers
      SET ENABLED = 'NO'
      WHERE NAME LIKE 'events_stages%';
      

    要仅收集特定的舞台事件,请仅启用相应的舞台乐器。要仅为特定阶段事件表收集阶段事件,请启用阶段工具,但仅启用与所需表相对应的阶段使用者。

    有关配置事件收集的其他信息,请参见“性能架构启动配置”和“性能架构运行时配置”。

    舞台活动进度信息

    Performance Schema阶段事件表包含两列,它们合在一起为每一行提供阶段进度指示器:

    • WORK_COMPLETED:该阶段完成的工作单元数
    • WORK_ESTIMATED:该阶段预期的工作单元数

    NULL如果没有为仪器提供进度信息,则每一列都是。信息的解释(如果可用)完全取决于仪器的实现。Performance Schema表提供了一个存储进度数据的容器,但不对度量本身的语义做任何假设:

    • 阿“单位”是一个整数指标,可随时间而增加执行期间,如字节,行,文件或表的数量进行处理。特定仪器的“工作单位”的定义留给提供数据的仪器代码。
    • WORK_COMPLETED值可以一次增加一个或多个单位,具体取决于所插入的代码。
    • WORK_ESTIMATED值可以在此阶段更改,具体取决于所插入的代码。

    阶段事件进度指示器的检测可以实现以下任何行为:

    • 没有进度检测

      这是最典型的情况,其中没有提供进度数据。在WORK_COMPLETEDWORK_ESTIMATED列都是NULL

    • 无限进度检测

      只有该WORK_COMPLETED列才有意义。没有为该WORK_ESTIMATED列提供数据,该列显示0。

      通过查询events_stages_current表中的受监视会话,监视应用程序可以报告到目前为止已执行了多少工作,但无法报告该阶段是否接近完成。当前,没有仪器可以像这样进行检测。

    • 有限进度仪器

      WORK_COMPLETEDWORK_ESTIMATED列都是有意义的。

      这种进度指示器适用于具有定义的完成标准的操作,例如稍后描述的表格复制工具。通过查询events_stages_current表中的受监视会话,监视应用程序可以报告到目前为止已执行了多少工作,并可以通过计算WORK_COMPLETED/WORK_ESTIMATED比率报告该阶段的总体完成百分比。

    stage/sql/copy to tmp table工具说明了进度指示器的工作方式。在执行ALTER TABLE语句期间,stage/sql/copy to tmp table使用该阶段,并且此阶段可能会长时间执行,具体取决于要复制的数据大小。

    表格复制任务具有已定义的终止(已复制所有行),并且已对该stage/sql/copy to tmp table阶段进行了检测,以提供有限的进度信息:所使用的工作单位是已复制的行数,WORK_COMPLETED并且WORK_ESTIMATED都是有意义的,并且它们的比率表示任务完成的百分比。

    要启用工具和相关使用者,请执行以下语句:

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

    要查看正在进行的ALTER TABLE语句的进度,请从events_stages_current表中选择。