性能模式处理阶段,这些阶段是语句执行过程中的步骤,如解析语句、打开表或执行filesort
操作。所显示的线程状态对应显示PROCESSLIST
或者是看得见的INFORMATION_SCHEMA。PROCESSLIST
表格当状态值改变时,阶段开始和结束。
在事件层次结构中,等待事件嵌套在阶段事件中,阶段事件嵌套在语句事件中,语句事件嵌套在事务事件中。
这些表存储了阶段事件:
events_stages_current
:每个线程的当前阶段事件。events_stages_history
:每个线程最近结束的阶段事件。events_stages_history_long
:全局结束的最近的舞台事件(跨所有线程)。
以下部分描述了舞台事件表。也有汇总阶段事件信息的汇总表;看到第25.12.15.2节“阶段汇总表”.
有关三个阶段事件表之间关系的更多信息,请参见第25.9节,“当前和历史事件的性能模式表”.
配置阶段事件收集
控制是否收集阶段事件,设置相关仪器和消费者的状态:
的
setup_instruments
表包含名称以“。”开头的仪器阶段
.使用这些工具可以启用或禁用各个阶段事件类的收集。的
setup_consumers
表包含消费者值,其名称与当前和历史阶段事件表名称对应。使用这些消费者来筛选阶段事件的集合。
除了那些提供语句进度信息的工具之外,阶段工具在默认情况下是禁用的。例如:
SELECT * FROM performance_schema。setup_instrumentsWHERE 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/checking privileges on cached query | NO | NO | | stage/sql/checking query cache for query | 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 | +----------------------------------------------------+---------+-------+
提供语句进度信息的阶段事件工具在默认情况下是启用和计时的:
SELECT * FROM performance_schema。setup_instrumentsWHERE ENABLED='YES' AND NAME LIKE "stage/%"; +------------------------------------------------------+---------+-------+ | NAME | ENABLED | TIMED | +------------------------------------------------------+---------+-------+ | stage/sql/copy to tmp table | 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 | +------------------------------------------------------+---------+-------+
默认情况下,阶段消费者是禁用的:
SELECT * FROM performance_schema。setup_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-stage -current=ON performance-schema-consumer-events-stage -history=ON performance-schema-consumer-events-stage -history-long=ON
禁用:
[mysqld] performance-schema-instrument='stage/%=OFF' performance-schema-consumer-events-stage -current=OFF performance-schema-consumer-events-stage -history=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%';
若要只收集特定的舞台事件,请只启用相应的舞台乐器。若要仅为特定的舞台事件表收集舞台事件,请启用舞台工具,但只启用与所需表对应的舞台消费者。
的setup_timer
表包含具有的名字
的价值阶段
表示阶段事件计时的单位。默认单位为纳秒
:
SELECT * FROM performance_schema。setup_timers WHERE NAME = 'stage';+-------+------------+ | 名字| TIMER_NAME | +-------+------------+ | 阶段|纳秒 | +-------+------------+
如果需要更改定时单位,请修改TIMER_NAME
值:
更新performance_schema。setup_timerSET TIMER_NAME = 'MICROSECOND' WHERE NAME = 'stage';
有关配置事件收集的其他信息,请参见第25.3节,“性能模式启动配置”,第25.4节“性能模式运行时配置”.
赛事进度信息
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/复制到TMP表
工具说明了进度指标如何工作。在执行ALTER TABLE
声明中执行/sql/复制到TMP表
阶段,这个阶段可能会执行很长时间,具体取决于要复制的数据的大小。
表复制任务具有已定义的终止(复制的所有行),并且执行/sql/复制到TMP表
stage被测量来提供有限的进度信息:使用的工作单元是复制的行数,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
表格