Performance Schema使用阶段,这些阶段是语句执行过程中的步骤,例如解析语句、打开表或执行filesort
操作。阶段对应于显示的线程状态显示PROCESSLIST
或者在INFORMATION_SCHEMA。PROCESSLIST
表格阶段在状态值改变时开始和结束。
在事件层次结构中,等待事件嵌套在阶段事件中,阶段事件嵌套在语句事件中,语句事件嵌套在事务事件中。
这些表存储了阶段事件:
events_stages_current
:每个线程的当前阶段事件。events_stages_history
:每个线程最近结束的舞台事件。events_stages_history_long
:已全局结束的最新阶段事件(跨所有线程)。
下面几节描述了阶段事件表。还有一些汇总表汇总了关于阶段事件的信息;看到第10.20.2节“阶段汇总表”.
有关三个阶段事件表之间关系的详细信息,请参见当前和历史事件的性能模式表.
配置阶段事件收集
为了控制是否收集阶段事件,设置相关工具和消费者的状态:
的
setup_instruments
表中包含名称以阶段
.使用这些工具可以启用或禁用各个阶段事件类的收集。的
setup_consumers
表包含使用者值,其名称与当前和历史阶段事件表名称对应。使用这些消费者来筛选阶段事件的集合。
除了那些提供语句进度信息的工具外,阶段工具在默认情况下是禁用的。例如:
SELECT NAME, ENABLED, TIMED FROM performance_schemasetup_instruments WHERE NAME RLIKE ' sql/[a-c];+----------------------------------------------------+---------+-------+ | 名字| |定时启用 | +----------------------------------------------------+---------+-------+ | 创建后阶段/ sql / |没有| | |阶段/ sql /分配本地表|没有| | |阶段/ sql /更改表|没有| | |阶段/ sql /提交alter table存储引擎|没有| | |阶段/ sql /改变主|没有| | | |阶段/ sql /检查主版本没有| | | |阶段/ sql /检查权限没有| | |阶段/ sql /清理|没有| | | |阶段/ sql /关闭表没有| | |阶段/ sql /连接到主|没有| | |阶段/ sql /转换堆MyISAM |没有| | |阶段/ sql /复制到组表|没有| | |阶段/ sql / tmp表复制|没有| | |阶段/ sql /复制tmp表|没有| | |阶段/ sql /创建排序索引|没有| | | |阶段/ sql /创建表没有| | |阶段/ sql /创建表| |不tmp | +----------------------------------------------------+---------+-------+
提供语句进度信息的阶段事件工具在默认情况下是启用和计时的:
SELECT NAME, ENABLED, TIMED FROM performance_schemasetup_instrumentsWHERE 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_schemasetup_consumersWHERE 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_instruments
而且setup_consumers
表:
启用:
更新performance_schema。setup_instrumentsSET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'stage/%'; UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE 'events_stages%';
禁用:
更新performance_schema。setup_instrumentsSET ENABLED = 'NO', TIMED = 'NO' WHERE NAME LIKE 'stage/%'; UPDATE performance_schema.setup_consumers SET ENABLED = 'NO' WHERE NAME LIKE 'events_stages%';
若要只收集特定的舞台事件,请只启用相应的舞台工具。若要仅为特定的阶段事件表收集阶段事件,请启用阶段工具,但只启用与所需表对应的阶段使用者。
有关配置事件收集的其他信息,请参见第四章,性能模式启动配置,第五章,性能模式运行时配置.
事件进展信息
Performance Schema阶段事件表包含两列,它们一起为每一行提供了一个阶段进度指示器:
WORK_COMPLETED
:该阶段完成的工作单元数WORK_ESTIMATED
:该阶段预期的工作单元数
每一列为零
如果文书没有提供进度信息。信息的解释(如果有的话)完全取决于仪器的执行情况。Performance Schema表提供了一个容器来存储进度数据,但没有对度量本身的语义做任何假设:
一个”工作单位”是在执行期间随时间增加的整数度量,例如处理的字节数、行数、文件数或表数。的定义”工作单位”对于特定的仪器,则由仪器代码提供数据。
的
WORK_COMPLETED
Value可以一次增加一个或多个单位,这取决于被检测的代码。的
WORK_ESTIMATED
值可以在此阶段更改,具体取决于插装的代码。
用于阶段事件进度指示器的检测可以实现以下任何行为:
没有进度仪表
这是最典型的情况,其中没有提供进度数据。的
WORK_COMPLETED
而且WORK_ESTIMATED
列都是零
.无界进度仪表
只有
WORK_COMPLETED
列有意义。的数据WORK_ESTIMATED
列,其中显示0。通过查询
events_stages_current
表中,监视应用程序可以报告到目前为止已经执行了多少工作,但不能报告该阶段是否即将完成。目前,还没有这样的阶段。有限进度仪表
的
WORK_COMPLETED
而且WORK_ESTIMATED
列都是有意义的。这种类型的进度指示器适合于具有已定义的完成条件的操作,例如后面描述的表复制工具。通过查询
events_stages_current
表,监视应用程序可以报告到目前为止已经执行了多少工作,并可以通过计算WORK_COMPLETED
/WORK_ESTIMATED
比率。
的执行/sql/copy到TMP表
仪表说明进度指标如何工作。在执行ALTER TABLE
声明中执行/sql/copy到TMP表
阶段,这个阶段可能会执行很长一段时间,这取决于要复制的数据的大小。
表复制任务具有定义的终止(复制所有行),并且执行/sql/copy到TMP表
阶段被设置为提供有限的进度信息:使用的工作单元是复制的行数,WORK_COMPLETED
而且WORK_ESTIMATED
都是有意义的,它们的比例表示任务完成的百分比。
要启用工具和相关的使用者,执行以下语句:
更新performance_schema。setup_instrumentsSET 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
表格