第25章MySQL性能模式

目录

25.1绩效模式快速启动
25.2绩效模式生成配置
25.3绩效模式启动配置
25.4性能模式运行时配置
25.4.1性能架构事件时序
25.4.2性能架构事件过滤
25.4.3事件预滤波
25.4.4预滤波的仪器
25.4.5预过滤的对象
25.4.6预滤波的线程
25.4.7预滤波的消费者
254.8例证
25.4.9命名工具或消费者对过滤操作
25.4.10确定什么是仪表
25.5绩效模式查询
最大性能模式仪器的命名约定
25.7性能模式状态监测
25.8绩效模式的原子和分子事件
25.9绩效模式语句消化和采样
25.10绩效模式一般特征表
25.11绩效模式表描述
25.11.1性能架构表索引
25.11.2性能模式设置表
25.11.3绩效模式实例表
25.11.4性能模式等事件表
25.11.5表现图式阶段事件表
2.11.6绩效指标
25.11.7性能模式交易表
25.11.8性能模式连接表
25.11.9性能模式连接属性表
25.11.10性能模式用户变量表
25.11.11性能架构复制表
25.11.12性能模式锁定表
25.11.13性能架构系统变量表
25.11.14性能模式状态变量表
25.11.15性能模式汇总表
25.11.16性能模式杂表
25.12性能模式选项和变量引用
25.13绩效模式命令选项
25.14绩效模式的系统变量
25.15性能模式状态变量
25.16性能架构的内存分配模型
25.17性能模式和插件
25.18使用性能模式来诊断问题
25.18.1查询使用性能模式分析

MySQL性能模式是一种在一个低水平的MySQL服务器运行监控功能。图式具有这些特征的表现:

性能模式的目的是提供关于服务器执行的有用信息,同时具有对服务器性能的影响最小。遵循这些设计目标的实现:

笔记

MySQLsys图式是一组对象提供方便的访问性能数据收集的模式。这个系统模式是默认安装的。使用说明,见26章,MySQL系统架构

25.1绩效模式快速启动

本节简要介绍了绩效模式的例子,说明如何使用它。额外的例子,看25.18节,“使用性能模式诊断问题”

性能模式是默认启用。要启用或明确禁用它,以启动服务器performance_schema变量设置为适当的值。例如,在服务器上使用这些线my.cnf文件:

[mysqld]
performance_schema=ON

当服务器启动时,它看到的performance_schema试图初始化性能模式。验证成功的初始化,使用此语句:

MySQL的>SHOW VARIABLES LIKE 'performance_schema';-------------------- ------- | variable_name |价值| -------------------- ------- | performance_schema |在| -------------------- -------

一个值ON意味着性能模式初始化成功和投入使用。一个值关闭意味着一些错误。检查信息出了什么差错服务器错误日志。

性能架构作为存储引擎实现的,所以你会看到它列在输出从INFORMATION_SCHEMA.ENGINES表或SHOW ENGINES声明:

MySQL的>SELECT * FROM INFORMATION_SCHEMA.ENGINESWHERE ENGINE='PERFORMANCE_SCHEMA'\G*************************** 1。行***************************引擎:performance_schema支持:是的评论:性能schematransactions:没有阿隆索:没有保存点:nomysql >SHOW ENGINES\G…发动机:performance_schema支持:是的评论:性能schematransactions:没有阿隆索:没有保存点:NO.。

这个PERFORMANCE_SCHEMA存储引擎运行中的表performance_schema数据库你可以做performance_schema默认数据库引用的表不需要具备数据库名称:

MySQL的>USE performance_schema;

在本章的例子很多假设performance_schema作为默认的数据库

性能模式表存储在performance_schema数据库关于这个数据库及其表结构的信息可以得到,作为任何其他数据库,选择从information_schema数据库或使用SHOW声明.例如,可以使用这些报表看存在的绩效模式表:

MySQL的>SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLESWHERE TABLE_SCHEMA = 'performance_schema';------------------------------------------------------ | table_name | ------------------------------------------------------ |账户| | cond_instances |…| events_stages_current | | events_stages_history | | events_stages_history_long | | events_stages_summary_by_account_by_event_name | | events_stages_summary_by_host_by_event_name | | events_stages_summary_by_thread_by_event_name | | events_stages_summary_by_user_by_event_name | | events_stages_summary_global_by_event_name | | events_statements_current | | events_statements_history | | events_statements_history_long |…| file_instances | | file_summary_by_event_name | | file_summary_by_instance | | host_cache | |主机| | memory_summary_by_account_by_event_name | | memory_summary_by_host_by_event_name | | memory_summary_by_thread_by_event_name | | memory_summary_by_user_by_event_name | | memory_summary_global_by_event_name | | metadata_locks | | mutex_instances | | objects_summary_global_by_type | | performance_timers | | replication_connection_configuration | | replication_connection_status | | replication_applier_configuration | | replication_applier_status | | replication_applier_status_by_coordinator | | replication_applier_status_by_worker | | rwlock_instances| | session_account_connect_attrs | | session_connect_attrs | | setup_actors | | setup_consumers | | setup_instruments | | setup_objects | | socket_instances | | socket_summary_by_event_name | | socket_summary_by_instance | | table_handles | | table_io_waits_summary_by_index_usage | | table_io_waits_summary_by_table | | table_lock_waits_summary_by_table | |线程| |用户| ------------------------------------------------------ MySQL >SHOW TABLES FROM performance_schema;------------------------------------------------------ | tables_in_performance_schema | ------------------------------------------------------ |账户| | cond_instances | | events_stages_current | | events_stages_history | | events_stages_history_long |…

随着时间的推移,额外的仪器进行实施绩效模式表数量的增加。

的名字performance_schema数据库是小写的,是它内部的表名称。查询应小写指定名称。

看到各个表的结构,使用SHOW CREATE TABLE

MySQL的>SHOW CREATE TABLE setup_consumers\G*************************** 1. row ***************************       Table: setup_consumersCreate Table: CREATE TABLE `setup_consumers` (  `NAME` varchar(64) NOT NULL,  `ENABLED` enum('YES','NO') NOT NULL,  PRIMARY KEY (`NAME`)) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8

表结构也可由表如选择INFORMATION_SCHEMA.COLUMNS或用这样的语句:SHOW COLUMNS

表中的performance_schema数据库可以根据他们的信息类型分:当前的事件,事件记录和总结,对象实例,并设置(配置)的信息。下面的例子说明了这些表格的一些用途。对于每一组的表的详细信息,参见25.11节,“绩效模式表描述”

起初,并不是所有的仪器和消费者都启用,所以性能架构不收集所有的事件。把所有这些,使事件的时间,执行两个报表(行数可根据MySQL版本不同):

mysql> UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES';
Query OK, 560 rows affected (0.04 sec)
mysql> UPDATE setup_consumers SET ENABLED = 'YES';
Query OK, 10 rows affected (0.00 sec)

看看服务器是目前做检查events_waits_current表它包含每个线程显示每个线程的最新监测事件一行:

MySQL的>SELECT * FROM events_waits_current\G*************************** 1。行*************************** thread_id:0:5523:5523 event_id end_event_id event_name:等待/同步/互斥/ mysys / thr_lock::互斥来源:thr_lock。C:525 timer_start:201660494489586:201660494576112:86526 timer_end timer_wait旋转:空object_schema:空object_name:空index_name:空object_type:nullobject_instance_begin:142270668 nesting_event_id:空nesting_event_type:空操作:锁number_of_bytes:空标志:0…

此事件表明,线程0在等待86526皮秒到锁上THR_LOCK::mutex,在互斥mysys子系统。第几列提供以下信息:

  • ID列指示哪个线程事件来自与事件数。

  • EVENT_NAME什么是仪表和指示来源表示源文件包含检测代码。

  • 定时器列显示当事件开始和停止多久了。如果一个事件仍在进行中,该TIMER_ENDtimer_waitNULL。定时器的值是近似值,表示在皮秒。关于定时器和事件的时间收集信息,看第25.4.1、绩效架构事件时间”

历史表包含的行相同的时事表但有更多的行和显示服务器已经做最近而不是目前.这个events_waits_historyevents_waits_history_long表包含最近十事件每线程和最近的一万事件,分别。例如,看信息的最近的事件线13生产,这样做:

MySQL的>SELECT EVENT_ID, EVENT_NAME, TIMER_WAITFROM events_waits_history WHERE THREAD_ID = 13ORDER BY EVENT_ID;---------- ----------------------------------------- ------------ | EVENT_ID | EVENT_NAME                              | TIMER_WAIT | ---------- ----------------------------------------- ------------ |       86 | wait/synch/mutex/mysys/THR_LOCK::mutex  |     686322 ||       87 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     320535 ||       88 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     339390 ||       89 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     377100 ||       90 | wait/synch/mutex/sql/LOCK_plugin        |     614673 ||       91 | wait/synch/mutex/sql/LOCK_open          |     659925 ||       92 | wait/synch/mutex/sql/THD::LOCK_thd_data |     494001 ||       93 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     222489 ||       94 | wait/synch/mutex/mysys/THR_LOCK_malloc  |     214947 ||       95 | wait/synch/mutex/mysys/LOCK_alarm       |     312993 | ---------- ----------------------------------------- ------------

新的事件加入到历史表,旧的事件被丢弃如果桌上摆满了。

汇总表提供汇总信息随着时间的推移,所有的事件。在这组表总结事件的数据以不同的方式。看这仪器已经执行次数最多的还是采取了最等待的时间,排序events_waits_summary_global_by_event_name桌上count_starSUM_TIMER_WAIT柱,其对应于计数(*)SUM(TIMER_WAIT)值,分别计算了所有事件:

MySQL的>SELECT EVENT_NAME, COUNT_STARFROM events_waits_summary_global_by_event_nameORDER BY COUNT_STAR DESC LIMIT 10;--------------------------------------------------- ------------ |事件_ name count _ | --------------------------------------------------- ------------ |等明星| /同步/互斥锁_ /苏氨酸/ mysys _ malloc等| 6419 | | / IO /文件/ | FRM | 452 | SQL /等/同步/互斥锁的SQL /插件/ _ | 337 |等| /同步/互斥mysys /锁/苏氨酸_ _开放| 187 | | /同步/互斥等mysys /锁/报警等_ | 147 | | /同步/互斥锁的SQL /:/ _ THD _ THD |等数据| 115 | MyISAM文件/ / / / IO kfile | 102 | /同步/ |等互斥锁_ / SQL /综合系统变量_ _ | 89 | | /同步/互斥等mysys /苏氨酸/ _互斥锁:| 89 | | /同步/互斥等_开/锁/ SQL MySQL --------------------------------------------------- ------------ | 88 | >SELECT EVENT_NAME, SUM_TIMER_WAITFROM events_waits_summary_global_by_event_nameORDER BY SUM_TIMER_WAIT DESC LIMIT 10;它的名字| _ ---------------------------------------- |事件和定时器等_ _ | ---------------------------------------- ---------------- |等待IO / / / / MySQL的SQL日志文件_ | 1599816582 | |同步/互斥等待/ / / mysys THR _锁_ malloc | 1530083250 | | wait / IO /文件/ SQL / binlog _指数| 1385291934 | | wait SQL文件IO / / / / / 1292823243 FRM | | |等待IO /文件/ / kfile MyISAM | 411193611 | |等待IO /文件/ / / dfile MyISAM | 322401645 | |同步/互斥等待/ / / mysys报警锁_ | 145126935 | |等待IO / / / / casetest | 104324715 SQL文件| | /同步/互斥等待SQL /锁/ _插件| 86027823 | | wait / IO /文件/ SQL / PID | 72591750 | ---------------------------------------- ----------------

这些结果表明,THR_LOCK_malloc互斥热,无论是它是如何经常使用和大量的时间,试图获得它的线程等待。

笔记

这个THR_LOCK_malloc互斥是只用于调试版本。在生产建设是不热,因为它是不存在的。

实例表格文件什么类型的对象使用。检测对象,由服务器使用时,产生一个事件。这些表提供事件的名称和注释或状态信息。例如,在file_instances文件I/O操作和相关文件的工具表列出实例:

MySQL的>SELECT * FROM file_instances\G*************************** 1。行*************************** file_name:/选择/ MySQL日志/ 60500 / binlog.000007event_name:等待/ IO /文件/数据库/ binlogopen_count:0 *************************** 2。行*************************** file_name:/选择/ MySQL / 60500 /数据/ MySQL / tables_priv.myievent_name:等待/ IO /文件/表/ kfileopen_count:1 *************************** 3。行*************************** file_name:/选择/ MySQL / 60500 /数据/ MySQL / columns_priv.myievent_name:等待/ IO /文件/表/ kfileopen_count:1…

设置表是用来配置和显示监控的特点。例如,setup_instruments列出组仪器的事件可以收集和显示都启用:

MySQL的>SELECT NAME, ENABLED, TIMED FROM setup_instruments;--------------------------------------------------- --------- ------- |名字|启用|定时| --------------------------------------------------- --------- -------…|阶段/ SQL /结束|没有|没有| |阶段/ SQL执行|没有|没有| |阶段/ SQL /初始化|没有|没有| |阶段/ SQL /插入|没有|没有|…|声明/ SQL /负载|是|是| |声明/ SQL /格兰特|是|是| |声明/ SQL /检查|是|是| |声明/ SQL /冲洗|是|是|…|等待/同步/互斥/ SQL / lock_global_read_lock |是|是|等待/同步/互斥| / SQL / lock_global_system_variables |是|是|等待/同步/互斥| / SQL / lock_lock_db |是|是| |等待/同步/互斥/平方信用证是lock_manager | |是|…|等待/同步/ rwlock / SQL / lock_grant |是|是| |等待/同步/ rwlock / SQL /记录器::lock_logger |是|是| |等待/同步/ rwlock / SQL / lock_sys_init_connect |是|是| |等待/同步/ rwlock / SQL / lock_sys_init_slave |是|是|…|等待/ IO /文件/数据库/ binlog |是|是| |等待/ IO /文件/数据库/ binlog_index |是|是| |等待/ IO /文件/数据库/用例|是|是| |等待/ IO /文件/数据库/ dbopt |是|是|…

了解如何解释仪器的名字,看第256,绩效模式仪器的命名约定”

控制是否事件收集工具,设置其ENABLED价值NO。。。。。。。例如:

MySQL的>UPDATE setup_instruments SET ENABLED = 'NO'WHERE NAME = 'wait/synch/mutex/sql/LOCK_mysql_create_db';

绩效架构使用收集的事件来更新表中的performance_schema数据库,作为消费者大学的事件的信息。《setup_consumers表列出了可用的消费者并启用:

MySQL的>SELECT * FROM setup_consumers;---------------------------------- --------- |名字|启用| ---------------------------------- --------- | events_stages_current |没有| | events_stages_history |没有| | events_stages_history_long |没有| | events_statements_current |是| | events_statements_history |是| | events_statements_history_long |没有| | events_transactions_current |是| | events_transactions_history |是| | events_transactions_history_long |没有| | events_waits_current |没有| | events_waits_history |没有| | events_waits_history_long |没有| | global_instrumentation |是| | thread_instrumentation |是| | statements_digest |是| ---------------------------------- ---------

控制是否性能架构维护消费者作为事件信息的目的地,设置其ENABLED价值

有关设置表的更多信息以及如何使用它们来控制事件收集,看第25.4.2、绩效架构事件过滤”

还有一些其他的表不属于任何一组。例如,performance_timers列出可用的事件定时器及其特点。关于定时器,看第25.4.1、绩效架构事件时间”

25.2绩效模式生成配置

性能模式是强制性的,总是编。可以排除性能架构仪器的某些部分。例如,排除阶段和声明的仪器,这样做:

shell> cmake . \
        -DDISABLE_PSI_STAGE=1 \
        -DDISABLE_PSI_STATEMENT=1

更多信息,见的描述DISABLE_PSI_XXXCMake选项第2.8.4节,“MySQL源-配置选项”

如果你安装MySQL在以前的安装,配置没有性能模式(或旧版的性能架构,可能没有所有的电流表),运行mysql_upgrade在启动服务器以确保performance_schema所有的电流表存在数据库。然后重新启动服务器。一个迹象表明,你需要做的是信息如在错误日志中存在以下:

[错误]本地表performance_schema’。'events_waits_history'has错结构[错误]本地表performance_schema”'events_waits_history_long'has错结构…

因为绩效模式配置为服务器在生成时,一排PERFORMANCE_SCHEMA出现在输出SHOW ENGINES。这意味着性能模式是可用的,不可以。要启用它,你必须在服务器启动时这么做,在下一节描述的。

25.3绩效模式启动配置

使用MySQL的性能架构,必须启用在服务器启动使收集事件发生。

性能模式是默认启用。要启用或明确禁用它,以启动服务器performance_schema变量设置为适当的值。例如,在服务器上使用这些线my.cnf文件:

[mysqld]
performance_schema=ON

如果服务器不能分配任何内部缓冲性能模式初始化期间,绩效模式禁用本身和集performance_schema关闭,和服务器运行没有仪器。

性能架构也允许仪器在服务器启动消费结构。

控制在服务器启动的工具,使用这种形式的一个选项:

--performance-schema-instrument='instrument_name=value'

在这里,instrument_name是一种乐器的名字如等待/同步/互斥/ SQL / lock_open,和value是一个值:

  • OFF错误的,或0仪器:禁用

  • ON真的,或1:使和时间的仪器

  • COUNTED:使计数(而不是时间)的仪器

每个--performance-schema-instrument选项可以指定只有一个乐器的名字,但选择的多个实例可以配置多个仪器。此外,模式允许在仪器名称仪器配置匹配模式。配置所有条件同步工具启用并计数,使用此选项:

--performance-schema-instrument='wait/synch/cond/%=COUNTED'

禁用所有的仪器,使用此选项:

--performance-schema-instrument='%=OFF'

例外:的memory/performance_schema/%仪器内置不可禁用启动时。

较长的仪器名称字符串先于短模式的名称,无论订单。有关指定选择工具模式的信息,参见第25.4.9,”命名的乐器或消费者对过滤操作”

无法识别的仪器名称被忽略。这可能是安装插件后可以创造工具,当时的名称是识别和配置。

控制在服务器启动消费,使用这种形式的一个选项:

--performance-schema-consumer-consumer_name=value

在这里,consumer_name是消费者的名字如events_waits_history,和value是一个值:

  • OFF错误的,或0:不收events for the consumer

  • ON真的,或1——————————

例如,使events_waits_history消费者使用此选项:

--performance-schema-consumer-events-waits-history=ON

允许用户的名字可以通过检查发现setup_consumers表模式是不允许的。在消费者的名字setup_consumers表格使用下划线,但在启动消费者,破折号和下划线的名字是相同的。

性能架构包括几个系统变量提供配置信息:

mysql> SHOW VARIABLES LIKE 'perf%';
+--------------------------------------------------------+---------+
| Variable_name                                          | Value   |
+--------------------------------------------------------+---------+
| performance_schema                                     | ON      |
| performance_schema_accounts_size                       | 100     |
| performance_schema_digests_size                        | 200     |
| performance_schema_events_stages_history_long_size     | 10000   |
| performance_schema_events_stages_history_size          | 10      |
| performance_schema_events_statements_history_long_size | 10000   |
| performance_schema_events_statements_history_size      | 10      |
| performance_schema_events_waits_history_long_size      | 10000   |
| performance_schema_events_waits_history_size           | 10      |
| performance_schema_hosts_size                          | 100     |
| performance_schema_max_cond_classes                    | 80      |
| performance_schema_max_cond_instances                  | 1000    |
...

这个performance_schema变量打开(放)OFF指示是否启用或禁用性能模式。其他变量显示表的大小(行数)或内存分配值。

笔记

与绩效模式启用,绩效模式实例的数量影响服务器的内存占用,也许在很大程度上。性能模式autoscales许多参数使用内存仅要求;看25.16节,“性能架构的内存分配模型”

改变绩效模式的系统变量的值,将它们在服务器启动。例如,把下面的线在my.cnf文件更改的等待事件的历史表的大小:

[mysqld]performance_schemaperformance_schema_events_waits_history_size=20performance_schema_events_waits_history_long_size=15000

性能模式自动大小的几个参数的值在服务器启动时如果没有显式设置。例如,它的大小,控制事件的尺寸参数表这样的等待。性能架构分配内存的内存使用增量,缩放到实际服务器的负载,而不是分配所有的内存需要在服务器启动。因此,许多大小参数不需要设置在所有。看到这autosized或自动定标参数,使用mysqld详细帮助检查选项的描述,或见第21,绩效模式系统变量”

每个autosized参数没有设置在服务器启动,绩效模式决定了如何基于以下系统值设置其值,这被认为是提示有关如何配置你的MySQL服务器:

max_connections
open_files_limit
table_definition_cache
table_open_cache

覆盖调整或自动缩放为一个给定的参数,将其设置为比其他?1在启动一个值。在这种情况下,性能架构分配指定的值。

在运行时,SHOW VARIABLES显示autosized参数被设置为实际值。自动定标参数显示值?1。

如果表现图式是残疾人,其autosized和自动定标的参数设置为1,保持?SHOW VARIABLES显示?1

25.4性能模式运行时配置

具体表现为图式的特征可以在运行时控制这类事件的发生使集合。

性能模式设置表包含监控配置信息:

mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
       WHERE TABLE_SCHEMA = 'performance_schema'
       AND TABLE_NAME LIKE 'setup%';
+-------------------+
| TABLE_NAME        |
+-------------------+
| setup_actors      |
| setup_consumers   |
| setup_instruments |
| setup_objects     |
| setup_threads     |
+-------------------+

你可以检查这些表的内容来获取性能模式特征监测信息。如果你有UPDATE特权,你可以通过修改设置表如何影响监控发生变化的表现模式操作。关于这些表的更多细节,参见第25.11.2,“性能模式设置表”

这个setup_instrumentssetup_consumers表中列出的事件可以被收集和消费者类型的事件信息其实是收集仪器,分别。其他设置表使监视配置进一步修改。第25.4.2、绩效架构事件过滤”,讨论如何修改这些表影响事件收集。

如果有性能模式配置更改,必须使用SQL语句运行时,你会喜欢这些变化,每次服务器开始生效,将报表文件和启动服务器--init-file=file_name选项这种策略也可以如果你有多个监控配置是有用的,每一个定制生产不同类型的监测,如休闲服务器健康监测,事故调查,应用性能故障排除,等等。把每个监控组态报表到自己的文件,并指定适当的文件为--init-file当你start the argument的服务器。

25.4.1性能架构事件时序

事件是通过仪器收集添加到服务器的源代码。仪器的时间事件,它是如何表现的模式提供了一种思路,多长时间发生的。它也可以配置工具收集时间信息。本节讨论可用的定时器和其特点,以及如何定时值表示在事件。

性能模式定时器

性能模式定时器的精度和费用变化。看看定时器可和其特点,检查performance_timers

MySQL的>SELECT * FROM performance_timers;------------- ----------------- ------------------ ---------------- | timer_name | timer_frequency | timer_resolution | timer_overhead | ------------- ----------------- ------------------ ---------------- |周期| 2389029850 | 1 | 72 | |纳秒| 1000000000 | 1 | 112 | |微秒| 1000000 | 1 | 136 | |毫秒| 1036 | 1 | 168 | ------------- ----------------- ------------------ ----------------

如果值与一个给定的定时器的名字是NULL,,是不支持你的平台。

列有这些含义:

  • 这个TIMER_NAME列显示了可用的定时器的名字。周期是指定时器是基于CPU(中央处理器)循环计数器。

  • TIMER_FREQUENCY显示每秒定时器单元数。一个周期定时器,频率一般是对CPU的速度有关。在一个2.4GHz的处理器得到系统显示的价值。其他计时器是基于固定分数秒。

  • TIMER_RESOLUTION指示计时器的单位在一个时间定时器的值的数目增加。如果定时器具有10位的分辨率,它的价值增加了10,每一次。

  • TIMER_OVERHEAD是循环的开销获得了个定时器定时的最小数量。每个事件的间接价值两倍因为计时器调用开头和结尾的事件显示。

性能架构指定定时器如下:

  • 等待定时器的使用CYCLE

  • 懒惰的阶段,声明和交易定时器使用NANOSECOND平台是在那里的纳秒定时器是可用的,MICROSECOND否则

在服务器启动,性能架构验证的假设在建造时间定时器任务是正确的,并显示一个警告如果定时器是不可用的。

时间的等待事件,最重要的标准是为了减少开销,在定时器的精度可能的费用,所以使用CYCLE时间是最好的

时间的声明(或阶段)以执行在大于它需要执行一个单一的等待时间的大小一般命令。时间的陈述,最重要的标准是有一个准确的测量,不受处理器频率变化的影响,因此使用一个定时器,不是基于周期是最好的。对于报表默认的定时器NANOSECOND。额外的开销相比于CYCLE定时器是不重要的,因为通过调用定时器两次带来的开销(当声明一旦结束的时候开始,)是级低于用于执行该语句本身的CPU时间的订单。使用周期定时器在这里没有好处,唯一的缺点。

通过循环计数器提供的精度取决于处理器的速度。如果处理器运行在1 GHz(十亿次/秒)或更高,循环计数器提供纳秒级精度。使用循环计数器要比实际时刻便宜多了。例如,标准gettimeofday()函数可以把成百上千的周期,这是数据收集可能发生数千或数百万次每秒可接受的开销。

循环计数器也有缺点:

  • 最终用户希望看到挂钟的单位时间,如第二个分数。从周期到几秒钟转换可以是昂贵的。为此,转换是一个相当快速和粗糙的乘法运算。

  • 处理器周期率的可能变化,如当笔记本电脑进入节能模式或当CPU减慢减少热量的产生。如果一个处理器的周期率的波动周期,从实时的单位换算是错误的。

  • 循环计数器可能不可靠或不取决于处理器或操作系统。例如,在Pentiums的指令RDTSC(汇编语言而不是C指令),这在理论上是可能的操作系统来防止用户模式程序使用它。

  • 一些处理器的细节与执行顺序或多处理器同步可能导致反似乎快或慢了1000次。

MySQL的工作与x386周期计数器(Windows,MacOS,Linux,Solaris,和其他Unix),PowerPC和IA-64。

在事件的性能模式定时器表示

在性能模式表,存储当前事件和历史事件行3列代表定时信息:TIMER_START_小时比表明当一个事件的开始和结束,和TIMER_WAIT指示数

这个setup_instruments桌子上有一个启用列表示该仪器收集事件。桌子上也有一个TIMED列指示设备定时。如果仪器是不启用的,它不产生的事件。如果启用的仪器是不定时,由仪器产生的事件无效的对于TIMER_START_小时比,和TIMER_WAIT定时器的值。这反过来又导致这些值是在计算总时间值汇总表忽略(和,最小,最大和平均)。

在内部,次事件存储在单元内的定时器事件影响时计时开始了。显示当事件是从绩效模式表检索,时间显示在皮秒(万亿分之一秒)来规范他们的标准单位,无论哪个定时器选择。

定时器的基线(零时间)发生在性能模式初始化在服务器启动。TIMER_START_小时比值表示自基线皮秒事件。TIMER_WAIT价值观是在皮秒时间

在事件的皮秒值是近似的。其精度受通常的形式的错误,从一个单位转换到另一个相关的。如果CYCLE用定时器和处理器速度的变化,可能会有漂移。由于这些原因,这是不合理的看timer_start一个事件,一个准确的测量时间自服务器启动值。另一方面,它是合理利用TIMER_STARTtimer_wait价值观ORDER BY条款的开始时间或时间顺序的事件。

在事件而不是一个值如微秒有业绩基础皮秒的选择。一个实现的目标是显示在一个统一的单位时间的结果,无论定时器。在一个理想的世界,这个时间单位会像墙上的时钟单元,是相当精确的;换句话说,微秒。但转换周期或纳秒到微秒,就必须为每一个仪器进行划分。分工是昂贵的多平台。乘法是不贵的,所以这是用。因此,时间单位是最高的整数倍TIMER_FREQUENCY值,利用乘数足够大以确保没有重大损失精度。结果是时间单位皮秒这个精度是虚假的,但决定使开销最小化。

而等阶段,陈述,或交易事件执行各自的当前事件表显示当前事件的时序信息:

events_waits_current
events_stages_current
events_statements_current
events_transactions_current

使人们有可能确定多长的未完成事件已经运行,定时器列如下:

  • TIMER_START填充

  • TIMER_END填充当前定时器的值

  • TIMER_WAIT填充时间为止(_小时比?TIMER_START

尚未完成的事件有END_EVENT_ID价值无效的。评估时间为止的事件,使用TIMER_WAIT专栏因此,找出尚未完成,已超过事件N皮秒到目前为止,监测应用程序可以在查询中使用这个表达:

在end_event_id无效timer_wait >N

事件识别是假定相应的仪器ENABLED定时设置YES而有关消费者使

25.4.2性能架构事件过滤

事件是在生产者/消费者的方式进行处理:

  • 检测代码的事件源产生的事件被收集。这个setup_instruments表中列出的事件可以被收集的工具,他们是否被启用,并且(为使仪器)是否收集时间信息:

    MySQL的>SELECT NAME, ENABLED, TIMED FROM setup_instruments;--------------------------------------------------- --------- ------- |名字|启用|定时| --------------------------------------------------- --------- -------…|等待/同步/互斥/ SQL / lock_global_read_lock |是|是|等待/同步/互斥| / SQL / lock_global_system_variables |是|是|等待/同步/互斥| / SQL / lock_lock_db |是|是| |等待/同步/互斥/ SQL / lock_manager |是|是|…

    这个setup_instruments表提供了对事件的生产控制的最基本形式。进一步完善基于对象或线程被监视的事件类型的生产,其他表格可以作为描述第25.4.3,”事件的预过滤”

  • 性能模式表是事件的目的地和消费活动。这个setup_consumers表列出了消费者哪些类型的事件信息可以发送和是否启用:

    MySQL的>SELECT * FROM setup_consumers;---------------------------------- --------- |名字|启用| ---------------------------------- --------- | events_stages_current |没有| | events_stages_history |没有| | events_stages_history_long |没有| | events_statements_current |是| | events_statements_history |是| | events_statements_history_long |没有| | events_transactions_current |是| | events_transactions_history |是| | events_transactions_history_long |没有| | events_waits_current |没有| | events_waits_history |没有| | events_waits_history_long |没有| | global_instrumentation |是| | thread_instrumentation |是| | statements_digest |是| ---------------------------------- ---------

过滤可以在不同阶段进行性能监控:

  • 预滤波这是通过修改性能模式配置,只有某些类型的事件是由生产商完成,并收集事件更新只有特定的消费者。为此,启用或禁用工具或消费者。预滤波的性能模式和具有全球影响,适用于所有的用户。

    原因使用预过滤:

    • 为了减少开销。性能模式的开销是最小的甚至所有的仪器启用,但也许你想进一步降低。或者你不在乎时间事件和要禁用计时代码消除时间开销。

    • 避免的事件中,你有没有兴趣填充当前事件或历史表。预过滤更多的树叶房间在这些表中的行为使仪器类型的实例。如果你只启用文件工具预滤波,没有行收集非文件工具。后过滤,非文件事件收集,少留行文件事件。

    • 为了避免维护某些事件表。如果你禁用了一个消费者,服务器不花时间维护消费者的目的地。例如,如果你不关心的事件历史记录,您可以禁用历史表消费者提高性能。

  • 后过滤这涉及使用WHERE在查询中,选择性能模式表信息的条款,指定要查看可用的事件。后进行滤波的基础上每用户因为个人用户选择的可用事件感兴趣。

    使用过滤后的原因:

    • 为了避免针对个人用户所感兴趣的事件信息是决策。

    • 使用性能模式调查性能问题时,将使用预过滤限制,事先都不知道。

以下各节提供更多的细节和预过滤的过滤操作提供命名工具或消费者指南。有关编写查询以检索信息(过滤后),看25.5节,“绩效架构查询”

25.4.3事件预滤波

预滤波的性能模式和具有全球影响,适用于所有的用户。预滤波可以适用于任何一个生产者或消费者事件处理阶段:

  • 配置预生产阶段的过滤,可以使用几个表:

    • setup_instruments表明该仪器是。仪器表中禁用不产生事件的其他生产相关设置表的内容。这台仪器启用允许的生产活动,受到了其他表的内容。

    • setup_objects控制是否性能架构监控特定的表和存储程序的对象。

    • threads指示是否监测是每个服务器线程启用。

    • setup_actors确定初始状态监测新的前台线程。

  • 配置预在消费级过滤,修改setup_consumers表这就决定了目的地发送事件。setup_consumers也含蓄地影响生产活动。如果一个特定的事件,将不会发送到任何目的地(即不消耗),性能架构不会产生这。

任何这些表的修改影响监测立即,除了修改的setup_actors表格只影响前台线程创建的线程修改后,不存在。

当你改变监视配置,性能架构不刷新历史记录表。事件已经收集留在当前事件和历史表的更新直到事件流离失所。如果您禁用工具,你可能需要等待一段时间才发生的事件对他们感兴趣的事件是由新的流离失所。另外,使用TRUNCATE TABLE清空历史记录表

在仪器的变化,你可能想将汇总表。一般来说,效果是重置摘要列0NULL,不删除行。这使您能够清晰采集值并重新聚集。这可能是有用的,例如,当你已经有了一个运行时配置的改变。这是例外,截断行为个人总结部分指出表。

以下各节描述如何使用特定的表来控制性能模式的预过滤。

25.4.4预滤波的仪器

这个setup_instruments表列出了可用的工具:

MySQL的>SELECT NAME, ENABLED, TIMED FROM setup_instruments;--------------------------------------------------- --------- ------- |名字|启用|定时| --------------------------------------------------- --------- -------…|阶段/ SQL /结束|没有|没有| |阶段/ SQL执行|没有|没有| |阶段/ SQL /初始化|没有|没有| |阶段/ SQL /插入|没有|没有|…|声明/ SQL /负载|是|是| |声明/ SQL /格兰特|是|是| |声明/ SQL /检查|是|是| |声明/ SQL /冲洗|是|是|…|等待/同步/互斥/ SQL / lock_global_read_lock |是|是|等待/同步/互斥| / SQL / lock_global_system_variables |是|是|等待/同步/互斥| / SQL / lock_lock_db |是|是| |等待/同步/互斥/平方信用证是lock_manager | |是|…|等待/同步/ rwlock / SQL / lock_grant |是|是| |等待/同步/ rwlock / SQL /记录器::lock_logger |是|是| |等待/同步/ rwlock / SQL / lock_sys_init_connect |是|是| |等待/同步/ rwlock / SQL / lock_sys_init_slave |是|是|…|等待/ IO /文件/数据库/ binlog |是|是| |等待/ IO /文件/数据库/ binlog_index |是|是| |等待/ IO /文件/数据库/用例|是|是| |等待/ IO /文件/数据库/ dbopt |是|是|…

控制是否仪器启用,设置其ENABLEDNO。配置是否为启用的仪器收集时间信息,设置其定时价值YES。设置TIMED柱性能的影响模式表内容描述第25.4.1、绩效架构事件时间”

Most to Mostsetup_instruments行立即影响监测。一些仪器,改进是有效的只有在服务器启动;改变它们在运行时没有任何影响。这种影响主要是互斥锁,条件,并在服务器rwlocks,尽管可能有其他的工具,这是真的。

这个setup_instruments表提供了对事件的生产控制的最基本形式。进一步完善基于对象或线程被监视的事件类型的生产,其他表格可以作为描述第25.4.3,”事件的预过滤”

下面的示例演示可能的操作的setup_instruments表这些变化,像其他的预滤波操作,影响所有用户。这些查询使用LIKE运营商和模式匹配仪器名称。有关指定选择工具模式,看第25.4.9,”命名的乐器或消费者对过滤操作”

  • 禁用所有的仪器:

    mysql> UPDATE setup_instruments SET ENABLED = 'NO';
    

    现在没有人会收藏品了。

  • 禁用所有文件的工具,将它们添加到当前残疾人仪器:

    mysql> UPDATE setup_instruments SET ENABLED = 'NO'
           WHERE NAME LIKE 'wait/io/file/%';
    
  • 仅禁用文件工具,使各种乐器:

    mysql> UPDATE setup_instruments
           SET ENABLED = IF(NAME LIKE 'wait/io/file/%', 'NO', 'YES');
    
  • 使所有的但在那些乐器mysys图书馆

    MySQL的>UPDATE setup_instrumentsSET ENABLED = CASE WHEN NAME LIKE '%/mysys/%' THEN 'YES' ELSE 'NO' END;
  • 禁用特定仪器:

    mysql> UPDATE setup_instruments SET ENABLED = 'NO'
           WHERE NAME = 'wait/synch/mutex/mysys/TMPDIR_mutex';
    
  • 拨动乐器的状态,轻弹它的ENABLED价值:

    MySQL的>UPDATE setup_instrumentsSET ENABLED = IF(ENABLED = 'YES', 'NO', 'YES')WHERE NAME = 'wait/synch/mutex/mysys/TMPDIR_mutex';
  • 禁用所有事件的时间:

    mysql> UPDATE setup_instruments SET TIMED = 'NO';
    

25.4.5预过滤的对象

这个setup_objects表格控件是否性能架构监控特定的表和存储程序的对象。最初的setup_objects内容是这样的:

MySQL的>SELECT * FROM setup_objects;------------- -------------------- ------------- --------- ------- | object_type | object_schema | object_name |启用|定时| ------------- -------------------- ------------- --------- ------- |事件| MySQL | % |没有|没有| |事件| performance_schema | % |没有|没有| |事件| information_schema | % |没有|没有| |事件| % % |是|是| | |功能| MySQL | % |没有|没有| |功能| performance_schema | % |没有|没有| |功能| information_schema | % |没有|没有| |功能| % | % |是|是| |程序| MySQL | % |没有|没有| |程序| performance_schema | % |没有|没有| |程序| information_schema | % |没有|没有| |程序| % | % |是|是| | TABLE | MySQL | % |没有|没有| |表| performance_schema | % |没有|没有| |表| information_schema | % |没有|没有| |表| % | % |是|是| |触发| MySQL | % |没有|没有| |触发| performance_schema | % |没有|没有| |触发| information_schema | % |没有|没有| |触发| % | % |是|是| ------------- -------------------- ------------- --------- -------

修正案setup_objects表影响对象监测立即

这个OBJECT_TYPE列指示对象类型,连续应用。过滤影响表的I/O事件(wait/io/table/sql/handler仪器)和表锁事件(开/锁/表/查询/处理程序()

这个OBJECT_SCHEMAobject_name列应该包含文字模式或对象的名字,或'%'匹配任何名字

这个ENABLED列指示是否匹配对象进行监测和定时Indicated to cost timing information .确定TIMED柱性能的影响模式表内容描述第25.4.1、绩效架构事件时间”

默认的对象配置的效果是仪器除了在所有对象mysqlinformation_schema,和performance_schema给我(Table in the)information_schema数据库不仪表无论内容setup_objects;行information_schema %只是让这个默认的明确。)

当性能模式检查比赛setup_objects,它试图找到更具体的比赛第一。行匹配一个给定的object_type架构的性能检查,以排:

  • OBJECT_SCHEMA='literal'OBJECT_NAME='literal'

  • OBJECT_SCHEMA='literal'OBJECT_NAME='%'

  • OBJECT_SCHEMA='%'OBJECT_NAME='%'

例如,一个表db1.t1性能模式看,行匹配'db1'是T1的,然后'db1'“%”,然后'%'“%”。在匹配发生事项因为不同的匹配顺序setup_objects行可以有不同的启用TIMED价值观

表相关的事件,表现的内容图式结合setup_objectssetup_instruments确定是否启用仪器是否时间使仪器:

用于存储程序的对象,性能架构以ENABLED定时直接从柱setup_objects行。没有结合的价值setup_instruments

假设setup_objects包含以下行申请db1db2,和db3

------------- --------------- ------------- --------- ------- | object_type | object_schema | object_name |启用|定时| ------------- --------------- ------------- --------- ------- |表| DB1 | T1 |是|是| |表| DB1 | T2 |没有|没有| |表| DB2 | % |是|是| |表| db3 | % |没有|没有| |表| % | % |是|是| ------------- --------------- ------------- --------- -------

如果一个对象相关的仪器setup_instruments有一个启用价值NO,不为对象的事件监测。如果启用YES根据监测,事件发生启用在相关的价值setup_objects行:

  • db1.t1事件监测

  • db1.t2没有事件监测

  • db2.t3事件监测

  • db3.t4没有事件监测

  • db4.t5事件监测

类似的逻辑也适用于结合TIMED列从setup_instrumentssetup_objects这是一个非常重要的问题。

如果一个永久表和临时表有相同的名字,比对setup_objects行时都一样。这是不可能使一个表监测而不是其他。然而,每一台仪器分别。

25.4.6预滤波的线程

这个threads表包含每个服务器线程一排。每一行包含一个线程信息和指示是否启用了监控。用于监视线程的性能架构,这些东西必须是真实的:

  • 这个thread_instrumentation消费者在setup_consumers表格必须

  • 这个threads.INSTRUMENTED列必须

  • 监控时只为那些线程的事件,使乐器制作setup_instruments

这个threads表还显示每个服务器的线程是否执行历史事件记录。这包括等阶段,声明和交易活动和影响记录这些表:

events_waits_historyevents_waits_history_longevents_stages_historyevents_stages_history_longevents_statements_historyevents_statements_history_longevents_transactions_historyevents_transactions_history_long

历史事件记录发生,这些事情必须是真实的:

前台线程(从客户端连接产生的初始值),INSTRUMENTED历史threads表的行是由是否与线程相关联的用户帐户匹配任何排在setup_actors表。the values from the吃启用HISTORY匹配的列setup_actors表格行

后台线程,有没有相关的用户。INSTRUMENTED历史YES默认情况下,setup_actors不咨询

最初的setup_actors内容是这样的:

MySQL的>SELECT * FROM setup_actors;------ ------ ------ --------- --------- |主机|用户|作用|启用|历史| ------ ------ ------ --------- --------- | % % % | | |是|是| ------ ------ ------ --------- ---------

这个HOST用户列应该包含文本的主机或用户的名称,或'%'匹配任何名字

这个ENABLED历史列指示是否启用仪器和历史事件相匹配的螺纹测井,受制于前面描述的其他条件。

当性能模式检查每一个新的前台线程匹配setup_actors,它试图找到更具体的比赛第一,使用用户HOST列(的作用在unused):

  • USER='literal'HOST='literal'

  • USER='literal'HOST='%'

  • USER='%'HOST='literal'

  • USER='%'HOST='%'

在匹配发生事项因为不同的匹配顺序setup_actors行可以有不同的用户HOST价值观。这使得检测和历史事件记录被选择性地应用每台主机,用户或帐户(用户和主机组合),基于启用HISTORY列的值:

  • 当最佳匹配一行ENABLED=YES,的仪表价值线成为YES。当最佳匹配一行HISTORY=YES,的HISTORY价值线成为

  • 当最佳匹配一行ENABLED=NO,的仪表价值线成为NO。当最佳匹配一行HISTORY=NO,的HISTORY价值线成为

  • 如果没有找到匹配的,INSTRUMENTED历史对于线程成为价值NO

这个ENABLED历史setup_actors行可以设置NO独立的一个。这意味着你可以使仪器分别从你是否收集历史事件。

默认情况下,监测和历史事件集合是所有新的前台线程启用因为setup_actors表最初包含一排“%”HOST用户。执行更有限的匹配如只启用一些前台线程监控,你必须改变这一行,因为它匹配任何连接,并添加更多的具体行HOST/用户组合

假设你修改setup_actors如下:

UPDATE setup_actors SET ENABLED = 'NO', HISTORY = 'NO'WHERE HOST = '%' AND USER = '%';INSERT INTO setup_actors (HOST,USER,ROLE,ENABLED,HISTORY)VALUES('localhost','joe','%','YES','YES');INSERT INTO setup_actors (HOST,USER,ROLE,ENABLED,HISTORY)VALUES('hosta.example.com','joe','%','YES','NO');INSERT INTO setup_actors (HOST,USER,ROLE,ENABLED,HISTORY)VALUES('%','sam','%','NO','YES');

这个UPDATE语句更改默认的比赛禁用仪表和历史事件集合。这个INSERT报表添加更具体的匹配的行。

现在的绩效模式确定如何设置INSTRUMENTED历史新的连接线程值如下:

  • 如果joe从本地主机连接,连接匹配第一个插入的行。这个仪表HISTORY对于线程成为价值

  • 如果joe连接方hosta.example.com、连接与第二插入行。这个INSTRUMENTED价值线成为HISTORY价值成为

  • 如果joe连接从任何其他主机,没有匹配的。这个仪表HISTORY对于线程成为价值

  • 如果sam连接从任何主机,连接匹配第三插入行。这个仪表价值线成为NO历史价值成为YES

  • 任何其他连接,与行HOST用户设置'%'火柴。这一行现在有启用HISTORY设置,所以INSTRUMENTED历史对于线程成为价值NO

修正案setup_actors表格只影响前台线程创建的线程修改后,不存在。影响现有的线程,修改仪表HISTORYthreads表中的行

25.4.7预滤波的消费者

这个setup_consumers表列出了可用的消费类型和能:

MySQL的>SELECT * FROM setup_consumers;---------------------------------- --------- |名字|启用| ---------------------------------- --------- | events_stages_current |没有| | events_stages_history |没有| | events_stages_history_long |没有| | events_statements_current |是| | events_statements_history |是| | events_statements_history_long |没有| | events_transactions_current |是| | events_transactions_history |是| | events_transactions_history_long |没有| | events_waits_current |没有| | events_waits_history |没有| | events_waits_history_long |没有| | global_instrumentation |是| | thread_instrumentation |是| | statements_digest |是| ---------------------------------- ---------

修改setup_consumers表影响前在消费级过滤和确定目的地发送事件。启用或禁用用户,设置其启用价值YES

修正案setup_consumers表立即影响监测

如果你禁用了一个消费者,服务器不花时间维护消费者的目的地。例如,如果你不关心历史事件的信息,使消费者的历史:

mysql> UPDATE setup_consumers
       SET ENABLED = 'NO' WHERE NAME LIKE '%history%';

在用户设置setup_consumers表格层次从高到低。以下原则适用:

  • 与消费者没有收到事件除非性能模式检查消费者和消费者是启用的目的地。

  • 消费者只有在所有消费者,这取决于检查(如果有)启用。

  • 如果消费者不检查,或检查而被禁用,这取决于其他消费者不检查。

  • 依赖消费者可能有自己的依赖消费者。

  • 如果一个事件将不会被发送到任何目的地,性能架构不会产生这。

下面的列表描述了可用的消费价值观。对几种有代表性的消费结构及其影响仪器的讨论,见第25.4.8,“用户配置”

全球消费者和螺纹

  • global_instrumentation是最高层次的消费。如果全球_仪表NO这不,环球仪器。所有其他设置低水平、不检查;不管他们是集。没有全球或每线程信息保持和任何个人事件在当前的事件或事件历史记录表收集。如果全球_仪表YES性能模式,保持信息的全局状态和检查thread_instrumentation消费者

  • thread_instrumentation检查只有全球_仪表YES。否则,如果thread_instrumentationNO,它禁用线程特定的仪器和所有较低级别的设置将被忽略。没有信息的每个线程和任何个人事件在当前的事件或事件历史记录表收集维护。如果thread_instrumentationYES,性能架构保持线程特定的信息并检查_事件xxx_current消费者

等待事件消费者

这些消费者需要global_instrumentationthread_instrumentation成为YES或者他们不检查。如果选中,他们的行为如下:

  • events_waits_current,如果,禁止在个人等待事件集合events_waits_currentTable .如果,它使等待事件的收集和绩效模式检查events_waits_historyevents_waits_history_long消费者

  • events_waits_history如果不检查event_waits_currentNO。否则,一个events_waits_history价值NO禁用或启用在等待事件集合events_waits_history

  • events_waits_history_long如果不检查event_waits_currentNO。否则,一个events_waits_history_long价值NO禁用或启用在等待事件集合events_waits_history_long

阶段事件消费者

这些消费者需要global_instrumentationthread_instrumentation成为YES或者他们不检查。如果选中,他们的行为如下:

  • events_stages_current,如果在各个阶段,禁用事件集合events_stages_currentTable .如果,它使舞台事件收集和绩效模式检查events_stages_historyevents_stages_history_long消费者

  • events_stages_history如果不检查event_stages_currentNO。否则,一个events_stages_history价值NO禁用或启用在舞台事件集合events_stages_history

  • events_stages_history_long如果不检查event_stages_currentNO。否则,一个events_stages_history_long价值NO禁用或启用在舞台事件集合events_stages_history_long

声明事件消费者

这些消费者需要global_instrumentationthread_instrumentation成为YES或者他们不检查。如果选中,他们的行为如下:

  • events_statements_current,如果,禁用在个人陈述事件集合events_statements_current表如果,它使语句事件收集和绩效模式检查events_statements_historyevents_statements_history_long消费者

  • events_statements_history如果不检查events_statements_currentNO。否则,一个_ _历史事件价值NO禁用或启用语句中的事件集合events_statements_history

  • events_statements_history_long如果不检查events_statements_currentNO。否则,一个events_statements_history_long价值NO禁用或启用语句中的事件集合events_statements_history_long

事件消费者交易

这些消费者需要global_instrumentationthread_instrumentation成为YES或者他们不检查。如果选中,他们的行为如下:

  • events_transactions_current,如果,禁用在个人交易事件集合events_transactions_current表如果,它使交易事件收集和绩效模式检查events_transactions_historyevents_transactions_history_long消费者

  • events_transactions_history如果不检查events_transactions_currentNO。否则,一个events_transactions_history价值NO禁用或启用事务中的事件集合events_transactions_history

  • events_transactions_history_long如果不检查events_transactions_currentNO。否则,一个events_transactions_history_long价值NO禁用或启用事务中的事件集合events_transactions_history_long

摘要消费者声明

这个statements_digest消费者的需要全球_仪表成为YES或是不检查。在陈述事件消费者没有依赖,所以你可以得到统计每消化没有收集统计events_statements_current,这方面的开销是有利的。相反,你可以得到详细的报表events_statements_current(没有消化的文摘DIGEST_TEXT列将无效的

有关声明消化的更多信息,参见25.9节,“性能架构声明消化和采样”

254.8例证

在用户设置setup_consumers表格层次从高到低。下面的讨论描述消费者如何工作,展现特定的配置及其影响消费者设置启用逐步从高到低。消费值显示的是代表。这里描述的一般原则适用于其他消费者的价值观,可。

配置描述发生在增加功能和开销的秩序。如果你不需要通过使低级别的设置提供信息,使其与绩效模式将以您的名义执行更少的代码,你将不得不通过筛选的信息少。

这个setup_consumers表包含以下价值层次:

global_instrumentation thread_instrumentation events_waits_current events_waits_history events_waits_history_long events_stages_current events_stages_history events_stages_history_long events_statements_current events_statements_history events_statements_history_long events_transactions_current events_transactions_history events_transactions_history_long statements_digest
笔记

在消费层次,为等待消费者阶段,报表,和交易都是在同一水平。这不同于事件的嵌套层次结构,在舞台活动巢事件等,窝在声明事件,窝内的交易活动。

如果一个给定的消费者设置NO性能模式,禁用与消费者相关的仪器仪表和忽略所有较低级别的设置。如果一个给定的设置性能模式,使与它相关的仪器和检查设置在下一个最低水平。为了描述每个消费者的规则,看第25.4.7,“预滤波的消费者”

例如,如果global_instrumentation启用,thread_instrumentation检查。如果thread_instrumentation启用的_事件xxx_current消费者检查。如果这些events_waits_current启用,events_waits_historyevents_waits_history_long检查

下面的配置说明指示设置元素架构的性能检查和输出表的维护(即为表收集信息)。

没有仪器

服务器配置状态:

mysql> SELECT * FROM setup_consumers;
+---------------------------+---------+
| NAME                      | ENABLED |
+---------------------------+---------+
| global_instrumentation    | NO      |
...
+---------------------------+---------+

在这种结构中,没有什么是仪表。

设置元素的检查:

输出表的维护:

全球只有仪表

服务器配置状态:

mysql> SELECT * FROM setup_consumers;
+---------------------------+---------+
| NAME                      | ENABLED |
+---------------------------+---------+
| global_instrumentation    | YES     |
| thread_instrumentation    | NO      |
...
+---------------------------+---------+

在这种配置中,仪器只维持全局状态。每个线程的仪器被禁用。

设置元素的额外检查,相对于前面的配置:

额外的输出表的维护,相对于前面的配置:

全球和螺纹仪表

服务器配置状态:

mysql> SELECT * FROM setup_consumers;
+----------------------------------+---------+
| NAME                             | ENABLED |
+----------------------------------+---------+
| global_instrumentation           | YES     |
| thread_instrumentation           | YES     |
| events_waits_current             | NO      |
...
| events_stages_current            | NO      |
...
| events_statements_current        | NO      |
...
| events_transactions_current      | NO      |
...
+----------------------------------+---------+

在这种结构中,每个线程维护全局和仪表。没有单独的事件在当前的事件或事件历史记录表收集。

设置元素的额外检查,相对于前面的配置:

  • setup_consumers消费者,_事件xxx_current,在那里xxx等待stages声明transactions

  • setup_actors

  • 专栏threads.instrumented

额外的输出表的维护,相对于前面的配置:

  • events_xxx_summary_by_yyy_by_event_name,在那里xxx等待stages声明transactions;和yyy线user主办account

全球,线程,和当前事件的仪器

服务器配置状态:

mysql> SELECT * FROM setup_consumers;
+----------------------------------+---------+
| NAME                             | ENABLED |
+----------------------------------+---------+
| global_instrumentation           | YES     |
| thread_instrumentation           | YES     |
| events_waits_current             | YES     |
| events_waits_history             | NO      |
| events_waits_history_long        | NO      |
| events_stages_current            | YES     |
| events_stages_history            | NO      |
| events_stages_history_long       | NO      |
| events_statements_current        | YES     |
| events_statements_history        | YES     |
| events_statements_history_long   | NO      |
| events_transactions_current      | YES     |
| events_transactions_history      | YES     |
| events_transactions_history_long | NO      |
...
+----------------------------------+---------+

在这种结构中,每个线程维护全局和仪表。个别事件在当前事件表收集,而不是在事件历史记录表。

设置元素的额外检查,相对于前面的配置:

  • 消费者events_xxx_history,在那里xxx等待stages声明transactions

  • 消费者events_xxx_history_long,在那里xxx等待stages声明transactions

额外的输出表的维护,相对于前面的配置:

  • events_xxx_current,在那里xxx等待stages声明transactions

目前全球,线程,事件,和事件历史记录仪表

前面的配置收集任何历史事件因为events_xxx_history_事件xxx_history_long消费者被禁用。这些消费者可以启用单独或一起收集历史事件的每个线程,在全球范围内,或两者。

这种配置收集历史事件的每个线程,但不是全局:

mysql> SELECT * FROM setup_consumers;
+----------------------------------+---------+
| NAME                             | ENABLED |
+----------------------------------+---------+
| global_instrumentation           | YES     |
| thread_instrumentation           | YES     |
| events_waits_current             | YES     |
| events_waits_history             | YES     |
| events_waits_history_long        | NO      |
| events_stages_current            | YES     |
| events_stages_history            | YES     |
| events_stages_history_long       | NO      |
| events_statements_current        | YES     |
| events_statements_history        | YES     |
| events_statements_history_long   | NO      |
| events_transactions_current      | YES     |
| events_transactions_history      | YES     |
| events_transactions_history_long | NO      |
...
+----------------------------------+---------+

此配置维护事件历史记录表:

  • events_xxx_history,在那里xxx等待stages声明transactions

这种配置收集历史事件在全球范围内,但不是每个线程:

mysql> SELECT * FROM setup_consumers;
+----------------------------------+---------+
| NAME                             | ENABLED |
+----------------------------------+---------+
| global_instrumentation           | YES     |
| thread_instrumentation           | YES     |
| events_waits_current             | YES     |
| events_waits_history             | NO      |
| events_waits_history_long        | YES     |
| events_stages_current            | YES     |
| events_stages_history            | NO      |
| events_stages_history_long       | YES     |
| events_statements_current        | YES     |
| events_statements_history        | YES     |
| events_statements_history_long   | YES     |
| events_transactions_current      | YES     |
| events_transactions_history      | YES     |
| events_transactions_history_long | YES     |
...
+----------------------------------+---------+

此配置维护事件历史记录表:

  • events_xxx_history_long,在那里xxx等待stages声明transactions

这种配置收集历史事件的每个线程的全局:

mysql> SELECT * FROM setup_consumers;
+----------------------------------+---------+
| NAME                             | ENABLED |
+----------------------------------+---------+
| global_instrumentation           | YES     |
| thread_instrumentation           | YES     |
| events_waits_current             | YES     |
| events_waits_history             | YES     |
| events_waits_history_long        | YES     |
| events_stages_current            | YES     |
| events_stages_history            | YES     |
| events_stages_history_long       | YES     |
| events_statements_current        | YES     |
| events_statements_history        | YES     |
| events_statements_history_long   | YES     |
| events_transactions_current      | YES     |
| events_transactions_history      | YES     |
| events_transactions_history_long | YES     |
...
+----------------------------------+---------+

此配置维护事件历史记录表:

  • events_xxx_history,在那里xxx等待stages声明transactions

  • events_xxx_history_long,在那里xxx等待stages声明transactions

25.4.9命名工具或消费者对过滤操作

给出了过滤操作名称可根据需要为特定的或一般的。表示单一仪器或消费,完全指定其名称:

mysql> UPDATE setup_instruments
       SET ENABLED = 'NO'
       WHERE NAME = 'wait/synch/mutex/myisammrg/MYRG_INFO::mutex';

mysql> UPDATE setup_consumers
       SET ENABLED = 'NO' WHERE NAME = 'events_waits_current';

指定一组仪器或消费者,使用模式匹配的组的成员:

mysql> UPDATE setup_instruments
       SET ENABLED = 'NO'
       WHERE NAME LIKE 'wait/synch/mutex/%';

mysql> UPDATE setup_consumers
       SET ENABLED = 'NO' WHERE NAME LIKE '%history%';

如果你使用一个模式,它的选择应使它与所有感兴趣的项目,没有别人。例如,选择所有文件I/O设备,最好使用一个模式,包括整个仪器名称前缀:

... WHERE NAME LIKE 'wait/io/file/%';

一个模式'%/file/%'将匹配有分量的其他仪器“/文件/”在名字的地方。更适合的模式'%file%'因为它将匹配工具“文件”在任何地方的名称,如wait/synch/mutex/innodb/file_open_mutex

检查仪器或消费者的名称的模式匹配,执行一个简单的测试:

mysql> SELECT NAME FROM setup_instruments WHERE NAME LIKE 'pattern';

mysql> SELECT NAME FROM setup_consumers WHERE NAME LIKE 'pattern';

关于名字所支持的类型的信息,参见第256,绩效模式仪器的命名约定”

25.4.10确定什么是仪表

它总是能够确定什么仪器性能模式包括通过检查setup_instruments表例如,看看文件相关的事件是仪表的InnoDB存储引擎使用此查询:

mysql> SELECT NAME, ENABLED, TIMED FROM setup_instruments
       WHERE NAME LIKE 'wait/io/file/innodb/%';
+-------------------------------------------------+---------+-------+
| NAME                                            | ENABLED | TIMED |
+-------------------------------------------------+---------+-------+
| wait/io/file/innodb/innodb_tablespace_open_file | YES     | YES   |
| wait/io/file/innodb/innodb_data_file            | YES     | YES   |
| wait/io/file/innodb/innodb_log_file             | YES     | YES   |
| wait/io/file/innodb/innodb_temp_file            | YES     | YES   |
| wait/io/file/innodb/innodb_arch_file            | YES     | YES   |
| wait/io/file/innodb/innodb_clone_file           | YES     | YES   |
+-------------------------------------------------+---------+-------+

一个详尽的描述恰恰是仪表不在本文档中,有几个原因:

  • 什么是仪表是服务器代码。这个代码的变化经常发生,这也会影响仪器的设置。

  • 它不是列出所有仪器实用因为有数百人。

  • 如前所述,可以发现通过查询setup_instruments表这些信息总是最新的版本为您的MySQL,还包括仪表插件你可能已经安装了,不是核心服务器部分的仪器,可通过自动化工具的使用。

25.5绩效模式查询

预过滤限制事件的信息收集和独立于任何特定的用户。相比之下,过滤后由个人用户通过查询适当的使用WHERE限制什么样的事件信息选择从可用事件预滤波后已应用条款。

进入第25.4.3,”事件的预过滤”,一个例子演示了如何为文件工具预过滤器。如果表包含文件和非文件信息,过滤后的另一种方式是看信息仅为文件事件。添加一个WHERE子句来查询选择适当限制活动:

MySQL的>SELECT THREAD_ID, NUMBER_OF_BYTESFROM events_waits_historyWHERE EVENT_NAME LIKE 'wait/io/file/%'AND NUMBER_OF_BYTES IS NOT NULL;----------- ----------------- | thread_id | number_of_bytes | ----------- ----------------- | 11 | 66 | | 11 | 47 | | 11 | 139 | | 5 | 24 | | 5 | 834 | ----------- -----------------

大多数的性能模式表索引,这给优化器访问其他比全表扫描的执行计划。这些指标也提高性能相关的对象,如sys架构视图,使用这些表。有关更多信息,参见8.2.4节,“性能优化模式查询”

最大性能模式仪器的命名约定

仪器名称由一系列分离的组成部分'/'人物实例名称:

等待IO / / / / / logwait MyISAM文件IO /文件/ mysys charsetwait /锁/表/ / / / / handlerwait SQL同步mysys /条件/条件/条件/ _ alarmwait /同步:更新SQL / binlog _ condwait /同步/互斥mysys位图/ / / / / _ mutexwait SQL同步互斥_ deletewait /锁/ / / / rwlock同步SQL查询缓存的查询:_ _:lockstage / / / /关闭tablesstage SQL SQL排序resultstatement executestatement / COM / COM / / / / _ tablestatement querystatement创建SQL SQL /锁/ _ tableserrors

仪器名称空间的树状结构。仪器的名称从左向右的组件提供从一般到具体的进展。一名有分量的数目取决于仪器的类型。

一个给定的一个名称部分取决于它的左组件的解释。例如,myisam出现在下列的名字,但存储引擎在第一名是文件I/O相关的,而在二是同步仪:

wait/io/file/myisam/log
wait/synch/cond/myisam/MI_SORT_INFO::cond

仪器名称包括一个由性能架构实现和由开发商实施仪器代码定义定义结构的前缀后缀。仪器的前缀顶层组件指示仪表的类型。该组件也决定在这事件计时器performance_timers表仪的应用。对于仪器名称的前缀部分,高层指示仪表的类型。

仪器名称后缀部分来自代码为仪器本身。后缀可能包括水平等:

  • 为主要成分的名称(如服务器模块myisamInnoDBmysys,或SQL也就是说

  • 代码中的变量的名称,在形式XXX(全局变量)或CCC::MMM(一个成员MMM在课堂上CCC)。实例:cond_thread_cacheTHR_LOCK_myisamBinlog : Lock Index Index

顶级仪器部件

  • idle:检测空闲事件。该仪器还没有进一步的成分。

  • error:检测错误事件。该仪器还没有进一步的成分。

  • memory:检测记忆事件

  • stage:检测阶段的事件

  • statement声明:事件检测

  • transaction仪表交易事件。该仪器还没有进一步的成分。

  • wait:仪表等待事件

闲置的仪器部件

这个idle仪器用于空闲事件,其性能架构产生的描述了socket_instances.state第25.11.3.5,“socket_instances表”

仪器的误差分量

这个error表明whether to collect仪器服务器错误和警告信息。这是默认启用的工具。的定时列为error排在setup_instruments表格不适用因为定时信息不收集。

记忆仪器部件

记忆的仪器是默认启用。记忆仪器可以启用或禁用启动时,或在运行时动态更新ENABLED对相关仪器在列setup_instruments表记忆工具的形式名称内存code_area/instrument_name哪里code_area是一种价值如SQLmyisam,和instrument_name是仪器的细节

仪器带有前缀命名memory/performance_schema/揭露有多少内存分配的性能架构内部缓冲区。这个内存/ performance_schema /仪器内置,始终启用,并且无法被禁用在启动或运行时。内建记忆体,仪器只显示memory_summary_global_by_event_name表有关更多信息,参见25.16节,“性能架构的内存分配模型”

阶段仪器部件

仪器名称的形成阶段stage/code_area/stage_name,在那里code_area是一种价值如SQLmyisam,和stage_name指示语句处理的阶段,如排序结果Sending data。阶段对应的线程状态显示SHOW PROCESSLIST或是可见的INFORMATION_SCHEMA.PROCESSLIST

表仪器部件

  • statement/abstract/*:语句的操作的抽象工具。摘要工具使用在表前早期阶段的确切的语句类型是已知的,然后变成一种更具体的声明时的类型是已知的仪器。为说明这一过程,看第25.11.6,绩效模式声明事件表”

  • statement/com:仪器操作命令。这些名字都对应com_xxx操作(见mysql_com。H头文件和sql/sql_parse.cc。例如,在声明/ COM /连接statement/com/Init DB仪器符合连线连接COM_INIT_DB命令

  • statement/scheduler/event“a single instrument to track all events expected by the Evenent Schdule .这件乐器是在一个展示的时候开始的。

  • statement/sp:仪表内部存储程序指令的执行。例如,在声明/ SP / cfetchstatement/sp/freturn工具使用游标提取和函数返回指令。

  • statement/sql:检测SQL语句操作。例如,在声明/ SQL / create_dbstatement/sql/select仪器用于CREATE DATABASESELECT声明.

螺纹工具组件

仪表线显示在setup_threads表,使线程类名称和属性。

螺纹工具开始thread;例如,线程/ SQL / parser_servicethread/performance_schema/setup

等待仪器部件

  • wait/io

    西安instrumented I/O操作。

    • wait/io/file

      检测文件I/O操作。对于文件,等待时间等待完成文件的操作(例如,一个电话fwrite())。由于缓存的物理文件I/O磁盘上可能不会发生在这个电话。

    • wait/io/socket

      仪表插座操作。插座仪器形式的名称wait/io/socket/sql/socket_type。服务器侦听套接字,它支持的每种网络协议。听套接字的TCP / IP或UNIX socket文件连接相关的工具有socket_type价值server_tcpip_socketserver_unix_socket,分别。当一个监听套接字检测连接,服务器将连接到一个新的插座由一个单独的线程管理。为新的连接螺纹的仪器有socket_type价值_客户端连接

    • wait/io/table

      仪表台的I/O操作。这些包括行级访问的持久的基础表或临时表。操作影响的行读取,插入,更新和删除。这一观点,等待与基表的视图引用的相关。

      不像大多数的等待,一个表可以包含其他I/O等待等待。例如,表I / O可能包括文件I/O和内存操作。因此,events_waits_current一台I/O等待通常有两排。有关更多信息,参见25.8节,“性能模式的原子和分子事件”

      一些列的操作可能会导致多台I/O等待。例如,插入可能激活触发引起的更新。

  • wait/lock

    在锁定操作仪器

    • wait/lock/table

      仪表台锁操作

    • wait/lock/metadata/sql/mdl

      检测元数据锁操作

  • wait/synch

    检测同步对象。同步对象的TIMER_WAIT时间:时间在尝试获取对象的锁阻塞,如果任何。

    • wait/synch/cond

      一个条件是由一个线程用于信号给其他线程,他们等待了。如果一个线程在等待一个条件,它可以醒来,继续执行。如果多个线程正在等待的时候,他们都会醒来,争夺资源,他们在等待。

    • wait/synch/mutex

      一个互斥对象用来允许访问资源(如一段可执行代码)同时防止其他线程访问资源。

    • wait/synch/rwlock

      读写锁使用对象锁的其他线程访问的同时防止其使用特定的变量。一个共享读锁可以同时被多个线程获得。独占写锁同时只能由一个线程获得。

    • wait/synch/sxlock

      一个共享互斥锁(SX)是一种rwlock锁定对象,同时允许不提供读取由其他线程访问公共资源写。sxlocks优化和提高工作负载的可扩展性的并发读写。

25.7性能模式状态监测

有几个状态变量与绩效模式关联:

mysql> SHOW STATUS LIKE 'perf%';
+-----------------------------------------------+-------+
| Variable_name                                 | Value |
+-----------------------------------------------+-------+
| Performance_schema_accounts_lost              | 0     |
| Performance_schema_cond_classes_lost          | 0     |
| Performance_schema_cond_instances_lost        | 0     |
| Performance_schema_digest_lost                | 0     |
| Performance_schema_file_classes_lost          | 0     |
| Performance_schema_file_handles_lost          | 0     |
| Performance_schema_file_instances_lost        | 0     |
| Performance_schema_hosts_lost                 | 0     |
| Performance_schema_locker_lost                | 0     |
| Performance_schema_memory_classes_lost        | 0     |
| Performance_schema_metadata_lock_lost         | 0     |
| Performance_schema_mutex_classes_lost         | 0     |
| Performance_schema_mutex_instances_lost       | 0     |
| Performance_schema_nested_statement_lost      | 0     |
| Performance_schema_program_lost               | 0     |
| Performance_schema_rwlock_classes_lost        | 0     |
| Performance_schema_rwlock_instances_lost      | 0     |
| Performance_schema_session_connect_attrs_lost | 0     |
| Performance_schema_socket_classes_lost        | 0     |
| Performance_schema_socket_instances_lost      | 0     |
| Performance_schema_stage_classes_lost         | 0     |
| Performance_schema_statement_classes_lost     | 0     |
| Performance_schema_table_handles_lost         | 0     |
| Performance_schema_table_instances_lost       | 0     |
| Performance_schema_thread_classes_lost        | 0     |
| Performance_schema_thread_instances_lost      | 0     |
| Performance_schema_users_lost                 | 0     |
+-----------------------------------------------+-------+

性能模式状态变量提供有关仪器仪表的信息不能加载或由于内存限制了。这些变量的名称有几种形式:

  • Performance_schema_xxx_classes_lost表示多少仪器的类型xxx无法加载

  • Performance_schema_xxx_instances_lost表明多少实例对象类型xxx无法创建

  • Performance_schema_xxx_handles_lost表明多少实例对象类型xxxcould not be opened。

  • Performance_schema_locker_lost表明有多少事件迷路的或没有记录

例如,如果一个互斥的仪表在服务器源但服务器无法分配内存在运行时的仪器,它的增量Performance_schema_mutex_classes_lost。互斥仍然作为一个同步对象(即服务器继续正常的功能),但它不会收集的性能数据。如果仪器可以分配,可用于检测实例初始化互斥。一个单独的互斥例如全局互斥,只会有一个实例。其他互斥有每个连接的实例,或每页不同的高速缓存和数据缓冲区,所以实例数随时间变化。增加连接或一些缓冲区的最大大小的最大数目将增加的情况下,可以马上分配的最大数量。如果服务器不能创建一个给定的仪器的互斥体的实例,它的增量Performance_schema_mutex_instances_lost

假设以下条件成立:

  • 服务器启动的--performance_schema_max_mutex_classes=200选项有二百互斥工具室。

  • 150互斥工具已装了。

  • 命名为插件plugin_a包含40个互斥的仪器。

  • 命名为插件plugin_b包含20个互斥的仪器。

服务器分配互斥工具取决于他们需要多少有多少插件,通过下面的语句序列如图所示:

INSTALL PLUGIN plugin_a

The server now has 150+40 = 190 mutex instruments.

UNINSTALL PLUGIN plugin_a;

服务器仍然有190的仪器。所有的历史数据的插件代码生成仍然是可用的,但对仪器的新事件没有收集。

INSTALL PLUGIN plugin_a;

服务器检测到40种乐器已经被定义了,所以没有新的工具被创造,和先前分配的内存缓冲区的利用。服务器仍然有190的仪器。

INSTALL PLUGIN plugin_b;

The server has room for 200-190 = 10 instruments (in this case, mutex classes), and sees that the plugin contains 20 new instruments. 10 instruments are loaded, and 10 are discarded or迷路的.这个Performance_schema_mutex_classes_lost指示仪器的数量(互斥类)丢失:

MySQL的>SHOW STATUS LIKE "perf%mutex_classes_lost";--------------------------------------- ------- | variable_name |价值| --------------------------------------- ------- | performance_schema_mutex_classes_lost |十| --------------------------------------- -------一行集(0.1秒)

仪表仍然工作并收集数据(部分)plugin_b

当服务器无法创建一个互斥体的仪器,出现这些结果:

模式描述的是适用于所有类型的仪器,不是互斥。

一个值Performance_schema_mutex_classes_lost大于0,可以在两例发生:

  • 为了节省几个字节的内存,你启动服务器--performance_schema_max_mutex_classes=N,在那里N小于默认值。默认值是选择足以载入所有插件在MySQL分配提供,但如果一些插件可以不装了。例如,你可以选择不加载一些在分布存储引擎。

  • 你加载一个第三方插件,是仪表的性能架构,但不允许插件仪器内存的要求当你启动服务器。因为它来自第三方,这台发动机的仪器内存消耗不占选择默认值performance_schema_max_mutex_classes

    如果服务器资源不足的插件的工具,你没有明确分配更多的使用--performance_schema_max_mutex_classes=N,加载插件导致饥饿的仪器。

If the value chosen forperformance_schema_max_mutex_classes太小了,没有错误在错误日志中报告有在运行时没有失败。然而,在该表的内容performance_schema数据库将错过的事件。这个Performance_schema_mutex_classes_lost状态变量是说明一些事件内部由于未能创建工具下降唯一可见的标志。

如果工具不丢失,它是已知的性能架构,用来检测实例。例如,wait/synch/mutex/sql/LOCK_delete是在一个互斥仪器名称setup_instruments表这台仪器是创建代码中的互斥使用时(在总谐波失真::lock_delete)但是互斥体的许多情况下,需要在服务器上运行。在这种情况下,LOCK_delete是互斥的,每个连接(THD),所以如果一个服务器有1000个连接,有1000线,和1000个仪表LOCK_delete互斥的实例(总谐波失真::lock_delete

如果服务器没有所有这1000种仪表互斥的房间(实例),一些互斥是创建的仪表,有些是没有仪器。如果服务器可以创建只有800实例,实例是失去了200。服务器继续运行,但增量Performance_schema_mutex_instances_lost200表明的情况下不能被创建。

一个值Performance_schema_mutex_instances_lost大于0时可发生代码初始化互斥锁时更比分配--performance_schema_max_mutex_instances=N

底线是,如果SHOW STATUS LIKE 'perf%'说什么了(所有的值都为零),性能架构的数据是准确的和可信赖的。如果有什么东西丢了,数据是完整的,和绩效模式不可能记录了内存量不足是使用了一切。在这种情况下,具体的_ _性能模式xxx_lost变量表示的问题

它可能是适当的在某些情况下,故意造成仪器的饥饿。例如,如果你不关心的文件I/O性能数据,你可以用所有的性能模式参数文件I/O相关的启动服务器设置为0。没有内存将被分配给文件相关的类,实例,或把手,和所有文件事件将丢失。

使用SHOW ENGINE PERFORMANCE_SCHEMA STATUS检查绩效模式代码的内部操作:

MySQL的>SHOW ENGINE PERFORMANCE_SCHEMA STATUS\G*************************** 3。行***************************型:performance_schema名称:events_waits_history.sizestatus:76 *************************** 4。行***************************型:performance_schema名称:events_waits_history.countstatus:一万五***************************。行***************************型:performance_schema名称:events_waits_history.memorystatus:76…*************************** 57。行***************************型:performance_schema名称:performance_schema.memorystatus:26459600…

本声明的目的是帮助DBA理解,对内存的要求有不同的性能模式选择的影响。一个字段的描述意义,看第13.7.6.15,“显示引擎语法”

25.8绩效模式的原子和分子事件

一台I/O事件,通常有两排events_waits_current,不一。例如,一排排取会导致这样的:

行# event_name timer_start timer_end ---- ---------- ----------- --------- 1等待/ IO /文件/表/ dfile 10001 10002 2等待/ IO /表/ SQL /处理10000空

该行获取导致文件读取。在这个例子中,表的I/O读取事件开始之前的文件I/O事件但未完成(其TIMER_END无效的页:1这是我的文件嵌套表格内的I/O事件

这是因为,不同于其他的原子的等待事件如互斥或文件I/O,I/O事件表分子的包括(重叠)的其他事件。进入events_waits_current,表I / O事件通常有两排:

  • 一行最新表I/O等待事件

  • 对于任何一种最新的等待事件一行

通常,但并非总是如此,这任何一种等待事件不同于表I / O事件。每个子事件完成时,它就会消失events_waits_current。在这一点上,直到下一子事件开始,桌上的I/O等待也是任何最近的等待。

25.9绩效模式语句消化和采样

MySQL服务器能维持消化信息的声明。消化过程将每个SQL语句的规范化形式(声明摘要)并计算SHA-256散列值(消化的哈希值)从归一化的结果。规范许可声明,类似于归纳和总结暴露对报表服务器执行和他们经常发生的类型信息。每个消化,代表语句产生消化存储为一个样本。本节介绍了如何声明和采样发生消化和他们如何能有用。

消化发生在解析器无论性能模式是可用的,所以其他的服务器组件,如查询重写插件访问报表摘要。

语句消化的一般概念

当解析器接收一个SQL语句,计算消化声明如果消化是必要的,如果以下任一条件为真,是真的:

  • 性能模式消化仪器启用

  • 查询重写插件启用

解析器也使用了STATEMENT_DIGEST_TEXT()STATEMENT_DIGEST()功能,应用程序可以调用计算归一化的语句消化和消化的哈希值,分别从SQL语句。

这个max_digest_length系统变量的值决定了可供计算的最大字节数归一化声明摘要。一旦空间量是消化过程的计算,用截断发生:从分析的声明没有进一步的令牌收集或图为摘要值。不同的只是之后很多字节解析令牌产生相同的归一化的声明,如果消化相比或者汇总消化统计认为是相同的语句。

归一化后的声明已经计算出来,SHA-256散列值计算从它。此外:

  • 如果任何查询重写插件启用,它叫和陈述的消化和消化的价值都可用它。

  • 如果性能架构已消化仪器启用,它复制一个归一化的语句消化,分配一个最大performance_schema_max_digest_length它的字节。因此,如果performance_schema_max_digest_length小于max_digest_length,复制截断相对原。归一化的语句消化复制存储在适当的绩效模式表,随着SHA-256哈希值从原来的标准化报表计算。(如果性能架构的规范语句截断消化相对原始,它不会重新计算SHA-256哈希值。副本)

语句归一化变换语句文本到一个更加标准化的消化的字符串表示,保留了一般语句结构的同时去除不必要的结构信息:

  • 对象标识符,如数据库和表的名称保存。

  • 文本值转换为参数标记。归一化的声明不保留信息如姓名、密码、日期、等等。

  • 移除注释和空白调整

考虑到这些语句:

SELECT * FROM orders WHERE customer_id=10 AND quantity>20
SELECT * FROM orders WHERE customer_id = 20 AND quantity > 100

规范这些陈述,解析器取代数据值?调整空白。语句产生相同的规范化形式,因此被认为是相同的

SELECT * FROM orders WHERE customer_id = ? AND quantity > ?

归一化的语句包含的信息较少但仍然是原来的声明代表。其他类似的陈述,有不同的数据值具有相同的归一化形式。

现在考虑这些陈述:

SELECT * FROM customers WHERE customer_id = 1000
SELECT * FROM orders WHERE customer_id = 1000

在这种情况下,归一化的陈述有不同,因为对象标识符:

SELECT * FROM customers WHERE customer_id = ?
SELECT * FROM orders WHERE customer_id = ?

如果正常化产生的超过在消化缓冲区可用空间的声明(由max_digest_length),截断时,文本的结尾。长归一化陈述仅在不同部分发生后被认为是相同的。考虑到这些语句:

SELECT * FROM mytable WHERE cola = 10 AND colb = 20
SELECT * FROM mytable WHERE cola = 10 AND colc = 20

如果截止后发生的是正确的AND,语句有正规形式:

SELECT * FROM mytable WHERE cola = ? AND ...

在这种情况下,第二列名称不同的是失去了和语句被认为是相同的。

声明在性能模式消化

在性能模式,包括这些组件声明消化:

一些性能表列存储原始的SQL语句从计算得到的摘要:

可供报表显示空间最大为1024字节默认。要更改此值,设置performance_schema_max_sql_text_length在服务器启动系统变量。变化影响所有列为所需的存储。

这个performance_schema_max_digest_length系统变量确定字节可消化值存储在性能模式的最大数量。然而,声明将显示长度可能超过可用的缓冲区大小,由于内部编码声明组件如关键词和文本值。因此,从选定的值摘要_文本声明事件表列可能出现超过performance_schema_max_digest_length价值

这个events_statements_summary_by_digest汇总表提供的报表服务器上执行一个剖面。它显示了什么样的报表应用程序执行多久。应用程序开发人员可以使用此信息与表中的其他信息来评估应用程序的性能特点。例如,表列显示的等待时间,锁定时间,或索引的使用可以突出,低效的查询类型。这为开发人员提供了洞察的应用需要注意的地方。

这个events_statements_summary_by_digest汇总表的大小是固定的。默认情况下,性能模式估计的大小使用在启动。指定表的大小明确,设置performance_schema_digests_size在服务器启动系统变量。如果表已满,性能架构组说明图式_名称DIGEST值不匹配现有的值在表中的一个特殊的行图式_名称DIGEST设置无效的。这允许所有报表必须计算。但是,如果该语句执行的很大一部分特殊行账户,可能需要通过增加汇总表的大小performance_schema_digests_size

语句消化内存使用

应用产生很长的语句,差别只在最后,增加max_digest_length能区分陈述,否则总的消化消化的计算。相反,减少max_digest_length导致服务器投入更少的内存来消化储存而不再报表汇总相同的摘要的可能性。管理者应该记住,在相应增加内存需求大的值的结果,特别是对工作中涉及到大量的并发会话(服务器配置max_digest_length个字节的会话)

如前所述,归一化的声明消化由解析器计算约束到最大max_digest_length字节,而正常的语句消化储存在性能模式使用performance_schema_max_digest_length字节。下列关于内存使用的考虑适用的相对值max_digest_lengthperformance_schema_max_digest_length

因为性能架构声明事件表可能存储很多消化,设置performance_schema_max_digest_length小于max_digest_length使管理员能够平衡这些因素:

  • 需要长期规范语句消化可用服务器组件在性能模式

  • 许多并发会话,其中每个消化计算内存分配

  • 需要限制的内存消耗的性能架构声明事件表存储时许多语句消化

评估用于SQL语句的存储量和消化的计算,使用SHOW ENGINE PERFORMANCE_SCHEMA STATUS声明,或监测仪器:

MySQL的>SELECT NAME FROM setup_instrumentsWHERE NAME LIKE '%.sqltext';------------------------------------------------------------------ | name | ------------------------------------------------------------------ |存储器的性能_ /模式/事件_ statements _ history.sqltext | |存储器的性能_ /模式/事件_ statements _ current.sqltext | |存储器的性能_ /模式/事件_ statements _史_ long.sqltext | ------------------------------------------------------------------ MySQL >SELECT NAME FROM setup_instrumentsWHERE NAME LIKE 'memory/performance_schema/%.tokens';---------------------------------------------------------------------- | name | ---------------------------------------------------------------------- |存储器的性能_ /模式/事件_ statements _ history.tokens | |存储器的性能_ /模式/事件_ statements _ current.tokens | |存储器的性能_ /模式/事件_ statements _总结_用_ digest.tokens | |存储器的性能_ /模式/事件_ statements _史_ long.tokens | ----------------------------------------------------------------------

表抽样

绩效架构使用声明采样收集代表陈述的摘要值,每生产一events_statements_summary_by_digest表这些列存储示例报表信息:三个样本(声明全文),QUERY_SAMPLE_SEEN(当声明被视),和query_sample_timer_wait(声明等待或执行时间)。性能架构更新所有三列的每个选择示例报表的时间。

当一个新的行插入,所行的摘要值表存储与消化相关的当前样本的声明。此后,当看到其他报表服务器具有相同的特征值,确定是否需要使用新的语句来取代目前的样本语句(即是否重采样)。重采样的政策是基于当前样本的声明和新的陈述和比较的等待时间,或者,当前样本语句的年龄:

  • 重采样基于等待时间:如果新的语句等待时间等待时间大于当前样本的声明,它成为当前样本的声明。

  • 基于重采样的年龄:如果performance_schema_max_digest_sample_age系统变量有一个大于零的值和电流采样的说法是超过许多秒,被认为是当前的声明太老了而新声明取代它。发生这种情况,即使新语句等待时间小于当前样本的声明。

默认情况下,performance_schema_max_digest_sample_age是60秒(1分钟)。改变如何快速样本语句到期由于年龄的增加或减少的价值。禁用基于年龄的重采样策略的一部分,集performance_schema_max_digest_sample_age这是0

25.10绩效模式一般特征表

的名字performance_schema数据库是小写的,是它内部的表名称。查询应小写指定名称。

在许多表performance_schema数据库是只读的,不能被修改:

MySQL的>TRUNCATE TABLE setup_instruments;错误1683(hy000):无效的performance_schema用法。

一些设置表,可以修改影响绩效模式操作柱;有的还允许将行插入或删除。截断允许明确收集的事件,所以TRUNCATE TABLE可以使用含有这些信息的表,如表前缀命名_ _事件等

Summary Tables截短can be withTRUNCATE TABLE。一般来说,效果是重置摘要列为零或无效的,不删除行。这使您能够清晰采集值并重新聚集。这可能是有用的,例如,当你已经有了一个运行时配置的改变。这是例外,截断行为个人总结部分指出表。

特权是为其他数据库和表:

  • 检索performance_schema表,你必须SELECT特权

  • 改变这些列可以修改,你必须UPDATE特权

  • 截断表可以被截断,你必须DROP特权

因为绩效模式表只适用于有限的一组权限,尝试使用GRANT ALL作为特权授予在数据库或表扫描失败与错误的速记:

MySQL的>GRANT ALL ON performance_schema.*TO 'u1'@'localhost';错误1044(42000):用户访问被拒绝'根'”'localhost'to数据库performance_schema'mysql >GRANT ALL ON performance_schema.setup_instrumentsTO 'u2'@'localhost';错误1044(42000):用户访问被拒绝'根'”'localhost'to数据库performance_schema”

相反,正是所需的权限授予:

mysql> GRANT SELECT ON performance_schema.*
       TO 'u1'@'localhost';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT SELECT, UPDATE ON performance_schema.setup_instruments
       TO 'u2'@'localhost';
Query OK, 0 rows affected (0.02 sec)

25.11绩效模式表描述

表中的performance_schema数据库可以划分如下:

  • 设置表。这些表格是用于配置和显示监控的特点。

  • Current events表。theevents_waits_current表包含每个线程最近的事件。其他类似的表包含在不同层次的事件层次时事:events_stages_current舞台事件,events_statements_current为了静静地events_transactions_current交易交易

  • 历史表。这些表具有相同的结构作为当前事件表,但包含更多的行。例如,等待事件,events_waits_history表包含最近十事件的每个线程。events_waits_history_long包含最新的10000事件。舞台,声明存在其他类似的表,和交易历史。

    改变历史的表的大小,在服务器启动设置相应的系统变量。例如,设置等待事件历史记录表的大小,设置performance_schema_events_waits_history_sizeperformance_schema_events_waits_history_long_size

  • 汇总表。这些表包含的信息聚集的群体性事件,包括那些已经从历史表丢弃。

  • 实例表。这些表格文档对象类型的仪器。检测对象,由服务器使用时,产生一个事件。这些表提供事件的名称和注释或状态信息。

  • 杂项表。这些不属于任何其他表组。

25.11.1性能架构表索引

下表列出了每个绩效模式表提供了每一个简短的描述。

表25.1绩效模式表

表名描述
accounts连接统计每个客户帐户
cond_instances同步对象实例
data_lock_waits数据锁等待的关系
data_locks数据锁定,并要求
events_errors_summary_by_account_by_error每个错误代码和账户错误
events_errors_summary_by_host_by_error每个错误代码和主机错误
events_errors_summary_by_thread_by_error每个错误代码和主机错误
events_errors_summary_by_user_by_error每个错误代码和主机错误
events_errors_summary_global_by_error每个错误代码错误
events_stages_current现阶段的事件
events_stages_history每个线程的最新阶段的事件
events_stages_history_long最近的一个阶段,事件的整体
events_stages_summary_by_account_by_event_name舞台活动每个账户和事件的名称
events_stages_summary_by_host_by_event_name阶段事件每主机名和事件名
events_stages_summary_by_thread_by_event_name每阶段等待线程和事件名称
events_stages_summary_by_user_by_event_name舞台活动每用户名和事件名
events_stages_summary_global_by_event_name每阶段等事件名称
events_statements_current当前语句事件
events_statements_histogram_by_digest声明每个模式和特征值的直方图
events_statements_histogram_global声明了全局直方图
events_statements_history每个线程的最新声明事件
events_statements_history_long最新声明事件的整体
events_statements_summary_by_account_by_event_name记录和记录
events_statements_summary_by_digest声明事件模式和特征值
events_statements_summary_by_host_by_event_name声明事件/主机名和事件名
events_statements_summary_by_program每个存储程序声明事件
events_statements_summary_by_thread_by_event_name声明事件的每个线程和事件的名称
events_statements_summary_by_user_by_event_nameuser name and events per声明事件名称
events_statements_summary_global_by_event_name语句的语句
events_transactions_current当前交易
events_transactions_history每个线程的最近交易事件
events_transactions_history_long最近的交易事件的整体
events_transactions_summary_by_account_by_event_name交易帐户和交易名称
events_transactions_summary_by_host_by_event_name交易事件每主机名和事件名
events_transactions_summary_by_thread_by_event_name交易活动的每个线程和事件的名称
events_transactions_summary_by_user_by_event_name交易的用户名称和用户名称
events_transactions_summary_global_by_event_name交易事件/事件名称
events_waits_current当前的等待事件
events_waits_history每个线程最近的等待事件
events_waits_history_long最近的等待事件的整体
events_waits_summary_by_account_by_event_name等待事件和事件名称账号
events_waits_summary_by_host_by_event_name等待事件每个主机名和事件名
events_waits_summary_by_instance等待事件的每个实例
events_waits_summary_by_thread_by_event_name等待事件的每个线程和事件的名称
events_waits_summary_by_user_by_event_name等待事件每用户名和事件名
events_waits_summary_global_by_event_name等待事件/事件名称
file_instances文件实例
file_summary_by_event_name每一事件的事件文件Name
file_summary_by_instance每个文件实例文件事件
global_status全局状态变量
global_variables全局系统变量
host_cache从内部主机缓存信息
hosts连接统计每个客户端的主机名
log_status关于备份服务器的日志信息
memory_summary_by_account_by_event_name内存操作账号和事件的名称
memory_summary_by_host_by_event_name内存操作的每个主机和事件的名称
memory_summary_by_thread_by_event_name内存操作的每个线程和事件的名称
memory_summary_by_user_by_event_name内存操作的每个用户和事件的名称
memory_summary_global_by_event_name内存操作全球每事件名称
metadata_locks元数据锁和锁的请求
mutex_instances同步互斥对象实例
objects_summary_global_by_type目的总结
performance_timers事件计时器是可用的
persisted_variables内容mysqld-auto.cnf文件
prepared_statements_instances事先准备好的声明实例和统计
replication_applier_configuration配置参数的交易者的奴隶
replication_applier_status目前的交易状况施放的奴隶
replication_applier_status_by_coordinatorSQL或协调线程应用现状
replication_applier_status_by_worker工作线程应用状态(空除非奴隶是多线程)
replication_connection_configuration用于连接到主配置参数
replication_connection_status连接的现状,掌握
rwlock_instances锁同步对象实例
session_account_connect_attrs连接属性为当前会话
session_connect_attrs所有会话的连接属性
session_status为当前会话状态变量
session_variables为当前会话的系统变量
setup_actors如何初始化新的前台线程监控
setup_consumers消费者的事件信息可以存储
setup_instruments类仪表为对象的事件可以收集
setup_objects对象应监测
setup_threads仪表线程名称和属性
socket_instances主动连接实例
socket_summary_by_event_name插座的等待和I / O每个事件的名称
socket_summary_by_instance插座的等待和I / O每个实例
status_by_account会话状态变量的每个帐户
status_by_host会话状态变量通过主机名称
status_by_thread会话状态变量的每个会话
status_by_user会话状态变量的每个用户的名称
table_handles表锁和锁的请求
table_io_waits_summary_by_index_usage表I / O等待每个索引
table_io_waits_summary_by_table表I / O等每桌
table_lock_waits_summary_by_table表每表锁等待
threads关于服务器的线程信息
user_defined_functions注册用户定义函数
user_variables_by_thread用户定义的变量的每个线程
users连接统计每个客户端的用户名
variables_by_thread每届会议系统变量
variables_info怎么最近设置系统变量

25.11.2性能模式设置表

设置表提供有关当前仪器仪表信息,使监控的配置被改变。因此,在这些表中的某些列可以改变,如果你有UPDATE特权

用表格,而不是设置信息的个人变量提供了一个高度的配置灵活性修改性能模式。例如,你可以使用标准的SQL语法的一个声明让多个同时进行的配置更改。

论文:安装程序是可用的。

25.11.2.1的setup_actors表

这个setup_actors表中包含的信息,决定是否启用监控和历史事件的新前景服务器线程日志(与客户端的连接关联的线程)。这个表有100行的默认最大大小。改变表的大小,修改performance_schema_setup_actors_size在服务器启动系统变量。

每一个新的前台线程,性能匹配的行为对线程的用户和主机setup_actors表如果从表相匹配的行,其启用HISTORY列的值用于设置的仪表HISTORY列,分别的threads该线程的表行。这使得检测和历史事件记录被选择性地应用每台主机,用户或帐户(用户和主机组合)。如果没有匹配的仪表HISTORY该线程的列设置为

后台线程,有没有相关的用户。INSTRUMENTED历史YES默认情况下,setup_actors不咨询

的初始内容setup_actors表匹配任何用户和主机组合,因此监测和历史事件收集的所有前台线程默认启用:

MySQL的>SELECT * FROM setup_actors;------ ------ ------ --------- --------- |主机|用户|作用|启用|历史| ------ ------ ------ --------- --------- | % % % | | |是|是| ------ ------ ------ --------- ---------

有关如何使用setup_actors表影响事件的监测,看第25.4.6,“预滤波线”

修正案setup_actors表格只影响前台线程创建的线程修改后,不存在。影响现有的线程,修改仪表HISTORYthreads表中的行

这个setup_actors这些列的表:

  • HOST

    主机名。这应该是一个名称,或'%'的意思任何主机

  • USER

    用户名称。这应该是一个名称,或'%'的意思任何用户

  • ROLE

    未使用的

  • ENABLED

    是否启用对前台线程的行匹配的仪器。的价值YES

  • HISTORY

    是否记录为前台线程的行匹配的历史事件。的价值YES

这个setup_actors这些指标表:

  • 主键(HOST用户ROLE

TRUNCATE TABLE是允许的setup_actors表它消除了行

23.11.2.2 . The Setup Control Table Table Table

这个setup_consumers表中列出的消费者类型的事件信息可以存储并启用:

MySQL的>SELECT * FROM setup_consumers;---------------------------------- --------- |名字|启用| ---------------------------------- --------- | events_stages_current |没有| | events_stages_history |没有| | events_stages_history_long |没有| | events_statements_current |是| | events_statements_history |是| | events_statements_history_long |没有| | events_transactions_current |是| | events_transactions_history |是| | events_transactions_history_long |没有| | events_waits_current |没有| | events_waits_history |没有| | events_waits_history_long |没有| | global_instrumentation |是| | thread_instrumentation |是| | statements_digest |是| ---------------------------------- ---------

在用户设置setup_consumers表格层次从高到低。为使不同消费者的影响的详细信息,参见第25.4.7,“预滤波的消费者”

修正案setup_consumers表立即影响监测

这个setup_consumers这些列的表:

  • NAME

    消费者的名字

  • ENABLED

    消费者是否启用。的价值YES。此列可以修改。如果你禁用了一个消费者,服务器不花时间给它添加事件信息。

这个setup_consumers这些指标表:

  • 主键(NAME

TRUNCATE TABLE是不允许的setup_consumers

25.11.2.3的setup_instruments表

这个setup_instruments表列出类仪表为对象的事件可以收集:

MySQL的>SELECT * FROM setup_instruments\G*************************** 1。行***************************名称:等待/同步/互斥/铁/ lock_pfs_share_list启用:不定时:无属性:单身波动:1documentation:组件可以提供自己的performance_schema表。这锁保护这些表定义的…*************************** 369名单。行***************************名称:阶段/ SQL执行启用:不定时:无属性:波动:0documentation:空…*************************** 687。行***************************名称:声明/摘要/查询功能:可以定时:是的特性:易变的波动:0documentation:SQL查询刚刚收到来自网络。在这一点上,真正的声明类型是未知的,该类型将SQL解析的…*************************** 696精制后。行***************************名称:记忆/ performance_schema / metadata_locks启用:是定时:空的属性:global_statistics波动:1documentation:用于表performance_schema metadata_locks记忆…

每个工具添加到源代码提供了一个连续的setup_instruments表,即使检测代码不会被执行。当仪器的启用和执行,检测的实例被创建,它是可见的xxx论坛表,如file_instancesrwlock_instances

Most to Mostsetup_instruments行立即影响监测。一些仪器,改进是有效的只有在服务器启动;改变它们在运行时没有任何影响。这种影响主要是互斥锁,条件,并在服务器rwlocks,尽管可能有其他的工具,这是真的。

关于这个角色的更多信息setup_instruments事件过滤表,看第25.4.3,”事件的预过滤”

这个setup_instruments这些列的表:

  • NAME

    仪器名称。仪器名称可能有多个部分,形成了一个层次结构,讨论第256,绩效模式仪器的命名约定”。从仪器的执行产生的事件有EVENT_NAME价值,是从仪器姓名值。有一个真正的(事件)名称,但是,这提供了一种方法来关联事件的工具。)

  • ENABLED

    仪器是否启用。的价值YES。一个残疾的仪器不产生的事件。此列可以修改,虽然设置ENABLED有没有影响已经创建的工具。

  • TIMED

    仪器是否是定时。的价值YES,或NULL。此列可以修改,虽然设置定时有没有影响已经创建的工具。

    TIMED价值无效的表明该仪器不支持定时。例如,内存的操作是不定时的,所以他们的TIMED无效的

    设置TIMED无效的一个工具,支持定时没有效果,不设置TIMED非—无效的一个不支持计时仪器

    如果启用的仪器是不定时的,仪器代码启用,但计时器不。由仪器产生的事件NULL对于timer_startTIMER_END,和timer_wait定时器的值。这反过来又导致这些值是在计算总和,最小,最大的忽视,在汇总表的时间平均值。

  • PROPERTIES

    该仪器性能。本栏目采用SET数据类型,所以多个标志从下面的列表可以设置每个仪器:

    • global_statistics:仪器只生产全球概要。更细的层次上总结是不可用的,如每线程,帐户,用户或主机。例如,大多数记忆仪器生产全球唯一的总结。

    • mutable:仪器变异为更具体的。此属性只适用于报表工具。

    • progress:该仪器能够报告进度数据。此属性只适用于舞台设备。

    • singleton该仪器有一个实例。例如,全球大多数互斥锁在服务器是单身,所以相应的仪器以及。

    • user:该仪器是用户的工作量直接相关(相对于系统的工作量)。一个这样的工具是我等待/ / / / _ SQL客户端套接字连接

  • VOLATILITY

    该仪器的波动。波动值的范围从低到高。该值对应的PSI_VOLATILITY_xxx在定义常量MySQL / PSI PSI _ base.h头文件:

    #define PSI_VOLATILITY_UNKNOWN 0
    #define PSI_VOLATILITY_PERMANENT 1
    #define PSI_VOLATILITY_PROVISIONING 2
    #define PSI_VOLATILITY_DDL 3
    #define PSI_VOLATILITY_CACHE 4
    #define PSI_VOLATILITY_SESSION 5
    #define PSI_VOLATILITY_TRANSACTION 6
    #define PSI_VOLATILITY_QUERY 7
    #define PSI_VOLATILITY_INTRA_QUERY 8
    

    这个VOLATILITY柱是纯粹的信息,为用户(和绩效模式代码)对仪器运行时行为的一些提示。

    Instruments with a low volatility index (PERMANENT = 1) are created once at server startup, and never destroyed or re-created during normal server operation. They are destroyed only during server shutdown.

    例如,在wait/synch/mutex/pfs/LOCK_pfs_share_list互斥是1的波动的定义,这意味着它是创建一次。可能从仪表本身开销(即互斥初始化)有没有影响这个仪器然后。运行时开销只发生在锁定或解锁互斥。

    Instruments with a higher volatility index (for example, SESSION = 5) are created and destroyed for every user session. For example, thewait/synch/mutex/sql/THD::LOCK_query_plan互斥是每次会话连接创建和销毁,当会话断开。

    这个互斥是性能模式的开销更敏感,因为开销来自不仅锁定和解锁设备,而且从互斥的创建和销毁的仪表,执行的多。

    另一方面,波动的担忧是否及何时的更新ENABLED柱其实有一定的效果:

    • 一个更新ENABLED影响仪表的对象创建之后,但对仪器已经创造了没有效果。

    • 这是TI公司推出的黑莓不稳定的使用新的设置setup_instruments表一

    例如,这种说法并不影响LOCK_query_plan对现有的会话互斥体,但也有新的会话创建更新后续影响:

    UPDATE setup_instruments SET ENABLED=valueWHERE NAME = 'wait/synch/mutex/sql/THD::LOCK_query_plan';

    这种说法实际上根本没有效果:

    UPDATE setup_instruments SET ENABLED=value
    WHERE NAME = 'wait/synch/mutex/pfs/LOCK_pfs_share_list';
    

    这个互斥体是永久性的,和被创造之前已经执行的更新。互斥是不会再创作,所以ENABLED价值setup_instruments从来没有使用过。启用或禁用该互斥体,使用mutex_instances表代替

  • DOCUMENTATION

    一个描述仪器的目的字符串。的价值NULL如果没有合适的描述

这个setup_instruments这些指标表:

  • 主键(NAME

TRUNCATE TABLE是不允许的setup_instruments

25.11.2.4的setup_objects表

这个setup_objects表格控件的性能监视器对象是否特定图式。这个表有100行的默认最大大小。改变表的大小,修改performance_schema_setup_objects_size在服务器启动系统变量。

最初的setup_objects感觉像这样

MySQL的>SELECT * FROM setup_objects;------------- -------------------- ------------- --------- ------- | object_type | object_schema | object_name |启用|定时| ------------- -------------------- ------------- --------- ------- |事件| MySQL | % |没有|没有| |事件| performance_schema | % |没有|没有| |事件| information_schema | % |没有|没有| |事件| % % |是|是| | |功能| MySQL | % |没有|没有| |功能| performance_schema | % |没有|没有| |功能| information_schema | % |没有|没有| |功能| % | % |是|是| |程序| MySQL | % |没有|没有| |程序| performance_schema | % |没有|没有| |程序| information_schema | % |没有|没有| |程序| % | % |是|是| | TABLE | MySQL | % |没有|没有| |表| performance_schema | % |没有|没有| |表| information_schema | % |没有|没有| |表| % | % |是|是| |触发| MySQL | % |没有|没有| |触发| performance_schema | % |没有|没有| |触发| information_schema | % |没有|没有| |触发| % | % |是|是| ------------- -------------------- ------------- --------- -------

修正案setup_objects表影响对象监测立即

对象类型的列setup_objects,绩效的模式使用表如何监视他们。目标匹配是基于object_schemaOBJECT_NAME专栏对象有没有比赛不监视。

默认的对象配置的效果是仪器除了在所有表mysqlinformation_schema,和performance_schema数据库(表中information_schema数据库不仪表无论内容setup_objects;行information_schema %只是让这个默认的明确。)

当性能模式检查比赛setup_objects,它试图找到更具体的比赛第一。例如,一个表db1.t1,它看起来相称'db1'是T1的,然后'db1'“%”,然后'%'“%”。在匹配发生事项因为不同的匹配顺序setup_objects行可以有不同的启用TIMED价值观

行可以插入或删除setup_objects由用户提供INSERTDELETE桌上的特权。对于现有的行,只有启用TIMED列可以被修改,由用户提供UPDATE桌上的特权

关于这个角色的更多信息setup_objects事件过滤表,看第25.4.3,”事件的预过滤”

这个setup_objects这些列的表:

  • OBJECT_TYPE

    the type of object to)。value is one of the'EVENT'事件调度,事件)“功能”(存储功能),'PROCEDURE'(可存储过程)“桌子”(基表),或'TRIGGER'(触发)

    TABLE过滤影响表的I/O事件(等待IO / / / / SQL表处理程序仪器)和表锁事件(wait/lock/table/sql/handler()

  • OBJECT_SCHEMA

    包含对象的架构。这应该是一个名称,或'%'的意思任何模式

  • OBJECT_NAME

    对检测对象的名称。这应该是一个名称,或'%'的意思任何对象

  • ENABLED

    无论是对于对象的事件检测。的价值YES。此列可以修改

  • TIMED

    无论是对于对象事件的时间。此列可以修改。

这个setup_objects这些指标表:

  • 索引OBJECT_TYPEobject_schemaOBJECT_NAME

TRUNCATE TABLE是允许的setup_objects表它消除了行

25.11.2.5的setup_threads表

这个setup_threads表列出了仪器的线程类。它使线程类名称和属性:

MySQL的>SELECT * FROM setup_threads;*************************** 1。行***************************名称:螺纹/ performance_schema /设置启用:是的历史:是的性质:辛格尔顿波动:0documentation:空…*************************** 4。行***************************名称:螺纹/ SQL /主要功能:是的历史:是的性质:辛格尔顿波动:0documentation:空*************************** 5。行***************************名称:螺纹/ SQL / one_connection启用:是的历史:是的特性:用户波动:0documentation:空…*************************** 10。行***************************名称:螺纹/ SQL / event_scheduler启用:是的历史:是的性质:辛格尔顿波动:0documentation:空

这个setup_threads这些列的表:

  • NAME

    仪器名称。螺纹工具开始thread;例如,线程/ SQL / parser_servicethread/performance_schema/setup

  • ENABLED

    仪器是否启用。的价值YES。此列可以修改,虽然设置ENABLED有没有影响线程已经运行。

    后台线程,设置ENABLED值控制是否仪表是集YES这是随后创建了这个仪器上市的螺纹threads表前台线程,这列没有效果的;setup_actors表优先

  • HISTORY

    是否记录了仪器的历史事件。的价值YES。此列可以修改,虽然设置HISTORY有没有影响线程已经运行。

    后台线程,设置HISTORY值控制是否历史是集YES这是随后创建了这个仪器上市的螺纹threads表前台线程,这列没有效果的;setup_actors表优先

  • PROPERTIES

    该仪器性能。本栏目采用SET数据类型,所以多个标志从下面的列表可以设置每个仪器:

    • singleton该仪器有一个实例。例如,有唯一的一个线程线/ SQL /主要仪器

    • user:该仪器是用户的工作量直接相关(相对于系统的工作量)。例如,线程等线程/ SQL / one_connection执行一个用户会话的user属性来区分系统线程

  • VOLATILITY

    该仪器的波动。这列具有相同的含义是在setup_instruments表看到第25.11.2.3,“setup_instruments表”

  • DOCUMENTATION

    一个描述仪器的目的字符串。的价值NULL如果没有合适的描述

这个setup_threads这些指标表:

  • 主键(NAME

TRUNCATE TABLE是不允许的setup_threads

25.11.2.6的setup_timers表

这张桌子是8.0.4删除MySQL。

25.11.3绩效模式实例表

实例表格文件什么类型的对象使用。他们提供事件的名称和注释或状态信息:

下面的表列出仪表同步对象,文件,和连接。有三种类型的同步对象:cond互斥,和rwlock。每个实例表有一个事件_ nameNAME列来表示每一行的仪器。仪器名称可能有多个部分,形成了一个层次结构,讨论第256,绩效模式仪器的命名约定”

这个mutex_instances.LOCKED_BY_THREAD_IDrwlock_instances.write_locked_by_thread_id柱对性能瓶颈或死锁是非常重要的。举例说明如何使用它们,为了这个目的,看25.18节,“使用性能模式诊断问题”

25.11.3.1的cond_instances表

这个cond_instances表中列出的所有条件的性能架构服务器执行时。一种情况是在代码中使用的信号,一个特定事件发生的同步机制,使一个线程等待这个条件可以恢复工作。

当一个线程等待某事发生的条件是什么的指示线程等待,但没有告诉其他线程或线程没有直接的方式,会造成病情的发生。

这个cond_instances这些列的表:

  • NAME

    与疾病相关的仪器名称。

  • OBJECT_INSTANCE_BEGIN

    在仪器状态存储器地址。

这个cond_instances这些指标表:

  • 主键(OBJECT_INSTANCE_BEGIN

  • 索引NAME

TRUNCATE TABLE是不允许的cond_instances

25.11.3.2的file_instances表

这个file_instances表中列出的所有文件的性能模式时执行文件I/O设备。如果磁盘上的文件从来没有被打开,它将不会在file_instances。当一个文件从磁盘中删除,也从file_instances

这个file_instances这些列的表:

  • FILE_NAME

    文件名

  • EVENT_NAME

    与文件相关的仪器名称。

  • OPEN_COUNT

    在文件打开的句柄计数。如果一个文件被打开又关上,打开了1次,但OPEN_COUNT将0。列出所有当前打开的文件服务器,使用在开放_ count>0

这个file_instances这些指标表:

  • 主键(FILE_NAME

  • 索引EVENT_NAME

TRUNCATE TABLE是不允许的file_instances

25.11.3.3的mutex_instances表

这个mutex_instances表格列出了所有的互斥锁被性能架构服务器执行时。一个互斥锁是一种用于代码的执行,在一个给定的时间只有一个线程可以访问一些常见的资源同步机制。资源可以说是受保护的通过互斥

当两个线程在服务器端执行(例如,两个用户会话执行查询的同时)需要访问相同的资源(文件、一个缓冲区,或者一些数据),这两个线程会互相竞争,所以第一个查询获取互斥锁会导致其他查询要等到第一个做解锁互斥。

在持有互斥是一个完成的工作临界区,和多个查询执行序列化的方式在做这个关键部分(一次),这是一个潜在的瓶颈。

这个mutex_instances这些列的表:

  • NAME

    与互斥相关仪器名称

  • OBJECT_INSTANCE_BEGIN

    在仪表互斥,内存地址。

  • LOCKED_BY_THREAD_ID

    当一个线程目前拥有互斥锁定,LOCKED_BY_THREAD_ID是的thread_id该锁的线程,否则NULL

这个mutex_instances这些指标表:

  • 主键(OBJECT_INSTANCE_BEGIN

  • 索引NAME

  • 索引LOCKED_BY_THREAD_ID

TRUNCATE TABLE是不允许的mutex_instances

对于每一个互斥检测代码,性能架构提供以下信息。

  • 这个setup_instruments表列出了仪器的名点,以前缀等待/同步/互斥/

  • 当一些代码创建一个互斥体,一行添加到mutex_instances表这个object_instance_begin列是一个属性唯一标识该互斥。

  • 当一个线程试图锁定一个互斥体,其events_waits_current表格显示,线行,这表明它是在等待一个互斥体(在事件_ name列),并说明该互斥等待(在OBJECT_INSTANCE_BEGIN柱)

  • 当一个线程成功锁定互斥锁:

  • 当一个线程解锁互斥,mutex_instances表明互斥现在没有主人(的thread_idNULL

  • 当一个互斥对象被破坏,相应的行删除mutex_instances

通过查询在下列表格,监视应用程序或DBA可以检测线程涉及互斥之间的瓶颈或死锁:

25.11.3.4的rwlock_instances表

这个rwlock_instances表中列出的所有rwlock(读写锁)的性能架构服务器执行时的情况。一个rwlock是一个用在代码执行的线程在一个给定的时间同步机制可以访问一些常见的资源按照一定的规则。资源可以说是受保护的rwlock。访问共享(多个线程可以同时拥有读锁),独家(只有一个线程可以写在一个给定的时间锁),或共享互斥(一个线程可以同时允许读写锁不被其他线程)。分享独家访问被称为sxlock优化和提高工作负载的可扩展性的并发读写。

这取决于有多少线程请求一个锁,与自然的锁请求,访问可以获得在共享模式下,独占模式,共享模式或不授予独家所有,等待其他线程完成第一。

这个rwlock_instances这些列的表:

  • NAME

    与锁相关的仪器名称

  • OBJECT_INSTANCE_BEGIN

    在检测锁内存地址

  • WRITE_LOCKED_BY_THREAD_ID

    当一个线程目前有一个rwlock锁定独家(写)模式,write_locked_by_thread_id是的THREAD_ID该锁的线程,否则无效的

  • READ_LOCKED_BY_COUNT

    当一个线程目前有一个rwlock加共享锁(读)模式,读_锁_ by _计数递增1。这仅仅是一个计数器,因此不能直接用于找到线程持有读锁,但可以看到是否有读的争夺上rwlock,看看有多少读者是目前活跃。

这个rwlock_instances这些指标表:

  • 主键(OBJECT_INSTANCE_BEGIN

  • 索引NAME

  • 索引WRITE_LOCKED_BY_THREAD_ID

TRUNCATE TABLE是不允许的rwlock_instances

通过查询在下列表格,监视应用程序或数据库管理员可以检测一些瓶颈或死锁线程涉及锁之间:

有一个限制:的rwlock_instances只能用来识别线程持有一个写锁,而不是线程持有读锁。

25.11.3.5的socket_instances表

这个socket_instances表提供的MySQL服务器的活动连接的实时快照。该表包含每个TCP / IP或UNIX套接字文件连接一行。本表中提供的信息提供给服务器的活动连接的实时快照。(更多信息可在插座的汇总表,包括网络活动如套接字操作和传输的字节数和接收;看第25.11.15.9,“插座汇总表”

mysql> SELECT * FROM socket_instances\G
*************************** 1. row ***************************
           EVENT_NAME: wait/io/socket/sql/server_unix_socket
OBJECT_INSTANCE_BEGIN: 4316619408
            THREAD_ID: 1
            SOCKET_ID: 16
                   IP:
                 PORT: 0
                STATE: ACTIVE
*************************** 2. row ***************************
           EVENT_NAME: wait/io/socket/sql/client_connection
OBJECT_INSTANCE_BEGIN: 4316644608
            THREAD_ID: 21
            SOCKET_ID: 39
                   IP: 127.0.0.1
                 PORT: 55233
                STATE: ACTIVE
*************************** 3. row ***************************
           EVENT_NAME: wait/io/socket/sql/server_tcpip_socket
OBJECT_INSTANCE_BEGIN: 4316699040
            THREAD_ID: 1
            SOCKET_ID: 14
                   IP: 0.0.0.0
                 PORT: 50603
                STATE: ACTIVE

插座仪器形式的名称wait/io/socket/sql/socket_type是这样的:

  1. 服务器侦听套接字,它支持的每种网络协议。听套接字的TCP / IP或UNIX socket文件连接相关的工具有socket_type价值server_tcpip_socketserver_unix_socket,分别

  2. 当一个监听套接字检测连接,服务器将连接到一个新的插座由一个单独的线程管理。为新的连接螺纹的仪器有socket_type价值_客户端连接

  3. 当连接终止,排在socket_instances与之相对应的是删除

这个socket_instances这些列的表:

  • EVENT_NAME

    的名字wait/io/socket/*这个事件产生的仪器。这是一个姓名值从setup_instruments表仪器名称可能有多个部分,形成了一个层次结构,讨论第256,绩效模式仪器的命名约定”

  • OBJECT_INSTANCE_BEGIN

    本栏目唯一标识插座。价值是一个内存中的对象的地址。

  • THREAD_ID

    标识符由服务器分配的内螺纹。每个插座是由一个单一的线程管理,所以每个插座可以映射到一个线程可以被映射到一个服务器进程。

  • SOCKET_ID

    内部文件句柄分配到插座。

  • IP

    客户端IP地址。值可以是IPv4或IPv6地址,或空白来表示一个UNIX套接字文件连接。

  • PORT

    TCP/IP端口号的范围从0到65535。

  • STATE

    插座的地位,要么IDLE活动中。主动套接字等待时间使用相应的插座仪器跟踪。空闲等待时间是跟踪使用的插座idle仪器

    如果是等待来自客户端的请求一个插座闲置。当一个套接字的空闲,事件行socket_instances这是从一个状态跟踪的插座开关活动中IDLE。这个事件_ name价值是wait/io/socket/*,但仪器定时暂停。相反,一个事件产生的events_waits_current表一事件_ name价值idle

    收到下一个请求时,该idle活动终止,插座开关从实例闲置ACTIVE与QC,resumes of the插座仪器。

这个socket_instances这些指标表:

  • 主键(OBJECT_INSTANCE_BEGIN

  • 索引THREAD_ID

  • 索引SOCKET_ID

  • 索引IP港口

TRUNCATE TABLE是不允许的socket_instances

这个IP:PORT列的组合值识别连接。这种组合的值是用于object_name列的events_waits_xxx表,确定连接的socket的事件来:

  • 对于UNIX域套接字(听众server_unix_socket),端口是0,和IP' '

  • 客户端连接通过UNIX域侦听器(client_connection),端口是0,和IP' '

  • 对于TCP/IP服务器监听套接字(server_tcpip_socket),港口一直是主端口(例如,3306),和IP总是0.0.0.0

  • 客户端连接通过TCP/IP侦听器(client_connection),不管是什么样的服务器分配的端口,但从来没有0。IP是原主机的IP(127.0.0.1::1当地的情况

25.11.4性能模式等事件表

性能架构工具等,这些事件是需要时间的。在事件层次,等待事件窝在舞台活动,窝在声明事件,窝内交易事件。

这些表店等待事件:

以下各节描述的等待事件表。也有汇总表,汇总信息等事件;看第25.11.15.1,“等待事件汇总表”

事件配置

控制等待事件的集合,集合的相关工具和消费者的状态:

  • 这个setup_instruments表中的名字从仪器等待。使用这些工具来启用或禁用等事件集合。

  • 这个setup_consumers表中对应于当前和近期的等待事件表姓名消费价值观。使用这些消费者过滤等事件集合。

一些等待仪器默认启用;其他残疾。例如:

mysql> SELECT NAME, ENABLED, TIMED FROM setup_instruments
       WHERE NAME LIKE 'wait/io/file/innodb%';
+-------------------------------------------------+---------+-------+
| NAME                                            | ENABLED | TIMED |
+-------------------------------------------------+---------+-------+
| wait/io/file/innodb/innodb_tablespace_open_file | YES     | YES   |
| wait/io/file/innodb/innodb_data_file            | YES     | YES   |
| wait/io/file/innodb/innodb_log_file             | YES     | YES   |
| wait/io/file/innodb/innodb_temp_file            | YES     | YES   |
| wait/io/file/innodb/innodb_arch_file            | YES     | YES   |
| wait/io/file/innodb/innodb_clone_file           | YES     | YES   |
+-------------------------------------------------+---------+-------+
mysql> SELECT NAME, ENABLED, TIMED FROM setup_instruments
       WHERE NAME LIKE 'wait/io/socket/%';
+----------------------------------------+---------+-------+
| NAME                                   | ENABLED | TIMED |
+----------------------------------------+---------+-------+
| wait/io/socket/sql/server_tcpip_socket | NO      | NO    |
| wait/io/socket/sql/server_unix_socket  | NO      | NO    |
| wait/io/socket/sql/client_connection   | NO      | NO    |
+----------------------------------------+---------+-------+

等待消费者默认是关闭的:

mysql> SELECT * FROM setup_consumers WHERE NAME LIKE '%waits%';
+---------------------------+---------+
| NAME                      | ENABLED |
+---------------------------+---------+
| events_waits_current      | NO      |
| events_waits_history      | NO      |
| events_waits_history_long | NO      |
+---------------------------+---------+

控制在服务器启动等待事件的收集,使用这样的诗句在你my.cnf文件:

  • 启用:

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

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

在运行期控制等事件收集、更新setup_instrumentssetup_consumers

  • 启用:

    UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
    WHERE NAME = 'wait/%';
    UPDATE setup_consumers SET ENABLED = 'YES'
    WHERE NAME LIKE '%waits%';
    
  • 禁用:

    UPDATE setup_instruments SET ENABLED = 'NO', TIMED = 'NO'
    WHERE NAME = 'wait/%';
    UPDATE setup_consumers SET ENABLED = 'NO'
    WHERE NAME LIKE '%waits%';
    

收集特定的等待事件,只启用相应的等仪器。收集的等待事件只对特定的等待事件表,使等待仪器只有等待消费者所需的相应表。

有关配置事件收集,看25.3节,“性能模式启动配置”,和25.4节,“性能模式运行时配置”

25.11.4.1的events_waits_current表

这个events_waits_current表包含当前的等待事件,每个线程的线程的最新事件的当前状态监测等一行。

包含等待事件的行表,events_waits_current是最基本的。其他的表包含等待事件行逻辑源于当前事件。例如,在events_waits_historyevents_waits_history_long表是最近的等待事件的集合,以一个固定的行数。

关于等待的事件收集的配置信息,看第25.11.4、绩效模式等事件表”

这个events_waits_current这些列的表:

  • THREAD_IDevent_id

    随着事件和线程的当前事件的事件时,启动相关的线程。这个THREAD_IDevent_id总之唯一标识行的值。没有两行具有相同的值对。

  • END_EVENT_ID

    本栏目设置NULL当事件开始和更新的线程的当前事件时,事件结束。

  • EVENT_NAME

    这个事件产生的仪器名称。这是一个NAME值从setup_instruments表仪器名称可能有多个部分,形成了一个层次结构,讨论第256,绩效模式仪器的命名约定”

  • SOURCE

    名称的源文件包含检测代码产生的事件和文件中的行号,仪表发生。这使您可以检查源代码来确定到底是。例如,如果一个互斥锁或锁被堵住了,你可以在这发生的背景。

  • TIMER_START_小时比TIMER_WAIT

    明明信息The Unit for these值是(第二picoseconds万亿)。theTIMER_START_小时比值指示当事件时间的开始和结束。TIMER_WAIT是事件经过的时间(持续时间)。

    如果一个事件还没有结束,TIMER_END是当前定时器的值timer_wait经过了迄今为止的时间(TIMER_END?timer_start

    如果一个事件是由仪器产生TIMED = NO、定时信息不收集,和timer_startTIMER_END,和timer_wait都是NULL

    皮秒的作为事件的时间和影响时间值的单位进行讨论,看第25.4.1、绩效架构事件时间”

  • SPINS

    一个互斥体,旋轮数。如果该值为NULL,代码不使用或不使用旋转轮旋转。

  • OBJECT_SCHEMAobject_nameOBJECT_TYPEobject_instance_begin

    这些列标识对象采取行动这意味着什么取决于对象类型。

    一个同步对象(cond互斥rwlock):

    • OBJECT_SCHEMAobject_name,和OBJECT_TYPE无效的

    • OBJECT_INSTANCE_BEGIN是记忆中的同步对象的地址。

    一个文件I/O对象:

    • OBJECT_SCHEMA无效的

    • OBJECT_NAME是文件名

    • OBJECT_TYPE文件

    • OBJECT_INSTANCE_BEGIN在内存中的地址

    一个Socket对象:

    • OBJECT_NAME是的IP地址:端口value for the插座。

    • OBJECT_INSTANCE_BEGIN在内存中的地址

    一台I/O对象:

    • OBJECT_SCHEMA是包含表的架构的名称。

    • OBJECT_NAME是表名

    • OBJECT_TYPE一个持久的基表或TEMPORARY TABLE一个临时表

    • OBJECT_INSTANCE_BEGIN在内存中的地址

    一个OBJECT_INSTANCE_BEGIN价值本身没有意义,只是不同的值表示不同的对象。object_instance_begin可用于调试。例如,它可以使用GROUP BY OBJECT_INSTANCE_BEGIN看1000个互斥的负载(保护,说,1000页或数据块)均匀分布或只是打了几个瓶颈。这可以帮助你与其他来源的信息,如果你看到一个日志文件或另一个调试和性能工具相同的对象的地址。

  • INDEX_NAME

    该指数使用的名称PRIMARY表示表的主索引无效的意味着没有使用索引

  • NESTING_EVENT_ID

    这个EVENT_ID价值的事件在该事件是嵌套。

  • NESTING_EVENT_TYPE

    嵌套事件类型。的价值TRANSACTION声明STAGE,或等待

  • OPERATION

    执行的操作的类型,如lock阅读,或write

  • NUMBER_OF_BYTES

    读取的字节操作数或写。表I / O等(事件的wait/io/table/sql/handler(),number_of_bytes显示的行数。如果该值大于1,该事件是一个批处理I/O操作。下面的讨论对专门单列报告和报告,反映了批我/ O.

    使用嵌套循环连接mysql执行实施。的性能架构仪器的工作是提供行数和累计执行时间每台在一起。假设一个加入下列表格,执行使用一个表的连接顺序查询t1T2t3

    选择从T1和T2…加入T3…

    扇出是增加或减少行数由添加表格中加入处理。如果表的扇出t3大于1,行多数取操作,表。假设加入访问10行T120行,t2每排T1,和30行t3每排桌子T2。单排报告,仪器操作的总数:

    10 + (10 * 20) + (10 * 20 * 30) = 6210
    

    在仪表操作数显著减少可通过聚集每个扫描(即每行的独特组合t1T2)。批量I/O报告、绩效模式产生的每一个事件的最深处的表扫描t3而对于每一行,以及仪表行操作的数量减少:

    10 + (10 * 20) + (10 * 20) = 410

    这是一个减少93%,说明批报道策略显著降低性能开销表架构I/O通过减少报告的要求。权衡的是较小的事件的定时精度。而不是一个单独的行运行时间为每行报告、批量的I / O时间包括了诸如加入缓冲,聚集操作的时间,并返回行的客户。

    批量I/O报告发生,这些条件必须是真实的:

    • 执行查询访问查询块里面的表(单表查询,这表算是内心)

    • 查询执行不从桌上请求一个行(因此,例如,eq_ref访问阻止使用批量报告)

    • 查询执行不评估查询包含表的访问

  • FLAGS

    保留供将来使用

这个events_waits_current这些指标表:

  • 主键(THREAD_IDevent_id

TRUNCATE TABLE是允许的events_waits_current表它消除了行

25.11.4.2的events_waits_history表

这个events_waits_history表中包含最新的N每个线程等待事件。价值N是autosized在服务器启动。设置表尺寸明确,设置performance_schema_events_waits_history_size在服务器启动系统变量。等待事件不会添加到表直到结束。当添加新的事件,大的事件被丢弃如果桌上摆满了。

这个events_waits_history表具有相同的结构events_waits_current包括指数化。见第25.11.4.1,“events_waits_current表”

TRUNCATE TABLE是允许的events_waits_history表它消除了行

关于等待的事件收集的配置信息,看第25.11.4、绩效模式等事件表”

25.11.4.3的events_waits_history_long表

这个events_waits_history_long表中包含最新的N等待事件。the value ofN是autosized在服务器启动。设置表尺寸明确,设置performance_schema_events_waits_history_long_size在服务器启动系统变量。等待事件不会添加到表直到结束。当添加新的事件,大的事件被丢弃如果桌上摆满了。当一个线程结束,其行从表中删除。

这个events_waits_history_long表具有相同的结构events_waits_current,除了它没有索引。看到第25.11.4.1,“events_waits_current表”

TRUNCATE TABLE是允许的events_waits_history_long表它消除了行

关于等待的事件收集的配置信息,看第25.11.4、绩效模式等事件表”

25.11.5表现图式阶段事件表

性能架构工具阶段,有步骤的语句的执行过程中,如解析语句,打开一个表格,或执行filesort运营阶段对应的线程状态显示SHOW PROCESSLIST或是可见的INFORMATION_SCHEMA.PROCESSLIST表阶段的开始和结束时的状态值的变化。

在事件层次,等待事件窝在舞台活动,窝在声明事件,窝内交易事件。

这些表存储阶段事件:

以下各节描述阶段事件表。也有汇总表,汇总信息阶段事件;看第25.11.15.2,阶段汇总表”

阶段事件配置

控制阶段的事件集合,集合的相关工具和消费者的状态:

  • 这个setup_instruments表中的名字从仪器阶段。使用这些工具来启用或禁用阶段事件集合。

  • 这个setup_consumers表中对应于当前和近期阶段事件表姓名消费价值观。使用这些消费者过滤阶段事件集合。

除了这些设备提供报表进度信息,舞台设备默认是关闭的。例如:

mysql> SELECT NAME, ENABLED, TIMED FROM 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 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 setup_consumers WHERE NAME LIKE '%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 setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
    WHERE NAME = 'stage/%';
    UPDATE setup_consumers SET ENABLED = 'YES'
    WHERE NAME LIKE '%stages%';
    
  • 禁用:

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

收集特定阶段的事件,使只有相应阶段的工具。收集阶段事件只对特定阶段的事件表,使舞台乐器只有阶段消费者所需的相应表。

有关配置事件收集,看25.3节,“性能模式启动配置”,和25.4节,“性能模式运行时配置”

阶段事件进展信息

性能架构阶段事件表包含两列,总之,提供每一排期进度指示器:

  • WORK_COMPLETED:工作单位完成的阶段数

  • WORK_ESTIMATED:工作单位预期阶段的数

每列NULL如果没有进度信息提供了一种工具。对信息的解释,如果它是可用的,完全取决于仪器的实现。性能模式表提供一个容器储存进度数据,但对其自身的语义没有假设:

  • 工作单位是一个整数的指标,随着时间的推移,在执行过程中,如字节数行,文件,或者表格处理。定义工作单位对于一个特定的仪器是留给仪器代码提供的数据。

  • 这个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声明的阶段/ SQL /复制到临时表阶段,这个阶段可以执行可能很长一段时间,根据数据的大小复制。

表格的副本任务有明确的终止(所有行复制),和stage/sql/copy to tmp table舞台是仪表界的进步提供信息:使用工作单元的行数复制,work_completedWORK_ESTIMATED都是有意义的,和他们比指示任务完成百分比。

为了使仪器和相关消费者,执行这些语句:

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

25.11.5.1的events_stages_current表

这个events_stages_current表包含当前事件,每个线程的线程的最新监测阶段事件的现状一行。

这些含有阶段事件列表,events_stages_current是最基本的。其他的表包含阶段事件行逻辑源于当前事件。例如,在events_stages_historyevents_stages_history_long表是最近阶段的事件的集合,以一个固定的行数。

关于舞台事件收集的配置信息,看第25.11.5,“表现图式阶段事件表”

这个events_stages_current这些列的表:

  • THREAD_IDevent_id

    随着事件和线程的当前事件的事件时,启动相关的线程。这个THREAD_IDevent_id总之唯一标识行的值。没有两行具有相同的值对。

  • END_EVENT_ID

    本栏目设置NULL当事件开始和更新的线程的当前事件时,事件结束。

  • EVENT_NAME

    这个事件产生的仪器名称。这是一个NAME值从setup_instruments表仪器名称可能有多个部分,形成了一个层次结构,讨论第256,绩效模式仪器的命名约定”

  • SOURCE

    名称的源文件包含检测代码产生的事件和文件中的行号,仪表发生。这使您可以检查源代码来确定到底是。

  • TIMER_START_小时比TIMER_WAIT

    明明信息The Unit for these值是(第二picoseconds万亿)。theTIMER_START_小时比值指示当事件时间的开始和结束。TIMER_WAIT是事件经过的时间(持续时间)。

    如果一个事件还没有结束,TIMER_END是当前定时器的值timer_wait经过了迄今为止的时间(TIMER_END?timer_start

    如果一个事件是由仪器产生TIMED = NO、定时信息不收集,和timer_startTIMER_END,和timer_wait都是NULL

    皮秒的作为事件的时间和影响时间值的单位进行讨论,看第25.4.1、绩效架构事件时间”

  • WORK_COMPLETEDwork_estimated

    这些列提供阶段性进展的信息,对已经实施的产生这样的信息工具。WORK_COMPLETED表明有多少工作单位已完成的阶段,和work_estimated表示多少单位预期的阶段。有关更多信息,参见阶段事件进展信息

  • NESTING_EVENT_ID

    这个EVENT_ID价值的事件在该事件是嵌套。一级事件嵌套事件通常是事件的声明。

  • NESTING_EVENT_TYPE

    嵌套事件类型。的价值TRANSACTION声明STAGE,或等待

这个events_stages_current这些指标表:

  • 主键(THREAD_IDevent_id

TRUNCATE TABLE是允许的events_stages_current表它消除了行

25.11.5.2的events_stages_history表

这个events_stages_history表中包含最新的N每个线程级事件。价值N是autosized在服务器启动。设置表尺寸明确,设置performance_schema_events_stages_history_size在服务器启动系统变量。舞台事件不会添加到表直到结束。当添加新的事件,大的事件被丢弃如果桌上摆满了。

这个events_stages_history表具有相同的结构events_stages_current包括指数化。见第25.11.5.1,“events_stages_current表”

TRUNCATE TABLE是允许的events_stages_history表它消除了行

关于舞台事件收集的配置信息,看第25.11.5,“表现图式阶段事件表”

25.11.5.3的events_stages_history_long表

这个events_stages_history_long表中包含最新的N实习活动。the value ofN是autosized在服务器启动。设置表尺寸明确,设置performance_schema_events_stages_history_long_size在服务器启动系统变量。舞台事件不会添加到表直到结束。当添加新的事件,大的事件被丢弃如果桌上摆满了。当一个线程结束,其行从表中删除。

这个events_stages_history_long表具有相同的结构events_stages_current,除了它没有索引。看到第25.11.5.1,“events_stages_current表”

TRUNCATE TABLE是允许的events_stages_history_long表它消除了行

关于舞台事件收集的配置信息,看第25.11.5,“表现图式阶段事件表”

2.11.6绩效指标

性能架构工具执行语句。声明事件发生在高水平的赛事体系。在事件层次,等待事件窝在舞台活动,窝在声明事件,窝内交易事件。

这些表存储声明事件:

以下各节描述的语句事件表。也有汇总表,汇总信息声明事件;看第25.11.15.3,“报表汇总表”

静态事件配置

控制语句事件集合,集合的相关工具和消费者的状态:

  • 这个setup_instruments表中的名字从仪器陈述。使用这些工具来启用或禁用声明事件集合。

  • 这个setup_consumers表中对应于当前和近期的声明事件表的名称的名称的消费价值观,并声明消化消费。使用这些消费者过滤器声明事件和报表收集消化。

报表工具是默认启用的,和events_statements_current_ _历史事件,和statements_digest声明消费者默认启用:

MySQL的>SELECT NAME, ENABLED, TIMED FROM setup_instrumentsWHERE NAME LIKE 'statement/%';--------------------------------------------- --------- ------- |名字|启用|定时| --------------------------------------------- --------- ------- |声明/ SQL /选择|是|是| |声明/ SQL / create_table |是|是| |声明/ SQL / create_index |是|是|…|声明/ SP /支撑|是|是| |声明/ SP /套|是|是| |声明/ SP / set_trigger_field |是|是| |声明/调度/事件|是|是| |声明/ COM /睡眠|是|是| |声明/ COM /退出|是|是| |声明/ COM /初始化数据库|是|是| |声明…/摘要/查询|是|是| |声明/摘要/ new_packet |是|是| |声明/摘要/ relay_log|是|是| --------------------------------------------- --------- -------
MySQL的>SELECT * FROM setup_consumers WHERE NAME LIKE '%statements%';-------------------------------- --------- |名字|启用| -------------------------------- --------- | events_statements_current |是| | events_statements_history |是| | events_statements_history_long |没有| | statements_digest |是| -------------------------------- ---------

在服务器启动语句事件采集控制,用这样的诗句在你my.cnf文件:

  • 启用:

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

    [mysqld]
    performance-schema-instrument='statement/%=OFF'
    performance-schema-consumer-events-statements-current=OFF
    performance-schema-consumer-events-statements-history=OFF
    performance-schema-consumer-events-statements-history-long=OFF
    performance-schema-consumer-statements-digest=OFF
    

在运行时声明事件采集控制、更新setup_instrumentssetup_consumers

  • 启用:

    UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
    WHERE NAME LIKE 'statement/%';
    UPDATE setup_consumers SET ENABLED = 'YES'
    WHERE NAME LIKE '%statements%';
    
  • 禁用:

    UPDATE setup_instruments SET ENABLED = 'NO', TIMED = 'NO'
    WHERE NAME LIKE 'statement/%';
    UPDATE setup_consumers SET ENABLED = 'NO'
    WHERE NAME LIKE '%statements%';
    

只有特定的语句events to collect,使只有相应的报表工具。声明事件only for specific to collect the statement声明事件表,使仪器的目标消费者corresponding to the only the statement需要表。

有关配置事件收集,看25.3节,“性能模式启动配置”,和25.4节,“性能模式运行时配置”

表监测

表监测从时刻服务器看到的活动是在一个线程的请求,这一刻都已经停止活动。通常,这意味着从时间服务器获取第一包从客户端到服务器的已完成发送响应。在存储的程序语句进行监测,像其他报表。

当性能架构工具请求(服务器命令或SQL语句),它使用的仪器名称,进行阶段(或更一般的摘要)更具体的直到它到达最终的仪器名称。

最终仪器名称对应于服务器命令和SQL语句:

  • 服务器命令对应的COM_xxx codes定义在mysql_com。H头文件和处理sql/sql_parse.cc。实例com_pingCOM_QUIT。工具命令的名字开始语言/ COM这样的王牌,statement/com/Ping声明/ COM /退出

  • SQL语句是以文本形式表示的,如DELETE FROM t1SELECT * FROM T2。SQL语句的工具的名字开始statement/sql,如声明/ SQL /删除statement/sql/select

一些最后的仪器名称是特定的错误处理:

  • statement/com/Error用不带服务器收到的邮件帐户。它可以用来检测由客户端,服务器不理解发送命令。这可能有助于识别错误等目的,或使用一个版本的MySQL比服务器更近的客户,或是试图攻击服务器的客户。

  • statement/sql/error对于SQL语句解析失败帐户。它可以用来检测畸形由客户端发送的查询。一个查询,无法解析与查询解析但失败由于一个错误,在执行过程中。例如,SELECT * FROM是不完整的,and thestatement/sql/error仪器的使用。通过对比,选择*但失败与解析No tables used误差。在这房子,声明/ SQL /选择and the statement is used to表示信息事件contains the nature of the error。

一个请求可以从任何来源获得:

  • 作为来自客户端的命令或语句的请求,将请求的数据包

  • 从一个复制从中继日志读取字符串的声明

  • 从事件调度器事件

一个请求的细节还没有初步认识和表现模式从抽象到一个序列,取决于请求的源特定仪器名称。

对接收到的客户请求:

  1. 当服务器检测到一个新的包在插座的水平,一个新的说法是从一个抽象的仪器名称statement/abstract/new_packet

  2. 当服务器读取数据包的数量,它知道更多关于请求接受的类型,和绩效模式提炼仪器名称。例如,如果请求是COM_PING包,仪器名称变声明/ COM /平这是最后的名字。如果请求是COM_QUERY包,这是对应的SQL语句而没有特定类型的声明。在这种情况下,仪器从一个抽象的名字更改为一个更具体的还是抽象的名字,声明/摘要/查询,和要求需要进一步的分类。

  3. 如果请求是一个声明,声明文本读给解析器。经过分析,精确的语句类型是已知的。如果请求是,例如,一个INSERT声明中,性能架构使仪器的名字声明/摘要/查询statement/sql/insert最后,which is the name。

对于请求读在复制从中继日志声明:

  1. 在中继日志报表存储为文本和阅读等。没有网络协议,所以statement/abstract/new_packet仪器不使用。相反,最初的仪器声明/摘要/ relay_log

  2. 当语句的分析,精确的语句类型是已知的。如果请求是,例如,一个INSERT声明中,性能架构使仪器的名字声明/摘要/查询statement/sql/insert最后,which is the name。

前面的描述仅适用于基于语句的复制。基于行的复制,表I / O做奴隶这过程的连续变化可以检测,但在中继日志行事件不出现离散的陈述。

一个请求从事件调度器收到:

事件执行仪表使用的名称statement/scheduler/event。。。。。。。这是最后一名。

在事件主体执行的语句是仪表使用statement/sql/*的名称,而不使用任何仪器前面的摘要。事件是一个存储程序,存储程序执行前预编译的记忆。因此,没有解析在运行时的类型声明由它执行的时间。

在事件主体执行的语句是子报表。例如,如果一个事件执行INSERT声明中,事件本身的执行是母,仪表使用停留,和INSERT是孩子,仪表使用声明/ SQL /插入。。。。。。。《独生子女父母/团队的关系之间单独的仪表操作。这不同于发生细化序列在内部一个单一的仪器操作,从抽象到最后的仪器名称。

统计学是收集报表,足以使只有最后的不statement/sql/*用于个人固定类型的仪器。荒唐的声明/摘要/ *仪器必须启用以及。这不应该是一个问题,因为所有的语句通常仪器默认启用。然而,一个应用程序,启用或禁用报表工具选择必须考虑禁用摘要仪器也禁用统计信息收集的个人陈述文书。例如,收集统计INSERT声明,声明/ SQL /插入必须启用,但也statement/abstract/new_packet声明/摘要/查询。同样的,复制的说法是仪表,statement/abstract/relay_log必须启用

没有统计数据汇总如抽象工具statement/abstract/Query因为没有声明是曾经和一个抽象的仪器为最终报表名称分类。

25.11.6.1的events_statements_current表

这个events_statements_current表包含当前事件,每个线程的线程的最新声明事件监测现状一行。

有一张桌子的桌子events_statements_current是最基本的。其他的表包含语句事件行逻辑源于当前事件。例如,在events_statements_historyevents_statements_history_long表是最近的声明事件的集合,以一个固定的行数。

关于声明事件收集的配置信息,看第25.11.6,绩效模式声明事件表”

这个events_statements_current这些列的表:

  • THREAD_IDevent_id

    随着事件和线程的当前事件的事件时,启动相关的线程。这个THREAD_IDevent_id总之唯一标识行的值。没有两行具有相同的值对。

  • END_EVENT_ID

    本栏目设置NULL当事件开始和更新的线程的当前事件时,事件结束。

  • EVENT_NAME

    名称仪器收集的事件。这是一个NAME值从setup_instruments表仪器名称可能有多个部分,形成了一个层次结构,讨论第256,绩效模式仪器的命名约定”

    对SQL语句的EVENT_NAME最初是价值COM /表/查询直到解析语句,然后改变到一个更合适的值,如第25.11.6,绩效模式声明事件表”

  • SOURCE

    名称的源文件包含检测代码产生的事件和文件中的行号,仪表发生。这使您可以检查源代码来确定到底是。

  • TIMER_START_小时比TIMER_WAIT

    明明信息The Unit for these值是(第二picoseconds万亿)。theTIMER_START_小时比值指示当事件时间的开始和结束。TIMER_WAIT是事件经过的时间(持续时间)。

    如果一个事件还没有结束,TIMER_END是当前定时器的值timer_wait经过了迄今为止的时间(TIMER_END?timer_start

    如果一个事件是由仪器产生TIMED = NO、定时信息不收集,和timer_startTIMER_END,和timer_wait都是NULL

    皮秒的作为事件的时间和影响时间值的单位进行讨论,看第25.4.1、绩效架构事件时间”

  • LOCK_TIME

    等待表锁花费的时间。计算这个值在微秒,但标准化更容易与其他性能比较皮秒模式定时器。

  • SQL_TEXT

    SQL语句的文本。一个SQL语句不相关的命令,值NULL

    可供报表显示空间最大是1024字节默认。要更改此值,设置performance_schema_max_sql_text_length在服务器启动系统变量。(改变这个值会影响其他性能模式表列为好。看到25.9节,“性能架构声明消化和采样”。)

  • DIGEST

    声明摘要SHA-256值作为字符串64进制的字符,或NULL如果statements_digest消费者no。有关声明消化的更多信息,参见25.9节,“性能架构声明消化和采样”

  • DIGEST_TEXT

    归一化的声明摘要文字,或NULL如果statements_digest消费者no。有关声明消化的更多信息,参见25.9节,“性能架构声明消化和采样”

    这个performance_schema_max_digest_length系统变量决定的最大字节数可消化值存储。然而,声明将显示长度可能比由于报表组件如消化缓冲关键词和文本值编码的可用缓冲区大小长。因此,从选定的值摘要_文本声明事件表列可能出现超过performance_schema_max_digest_length价值

  • CURRENT_SCHEMA

    该语句的默认数据库,NULL如果没有

  • OBJECT_SCHEMAobject_nameOBJECT_TYPE

    嵌套语句(存储程序),这些列包含父表的信息。否则他们NULL

  • OBJECT_INSTANCE_BEGIN

    该列标识声明。价值是一个内存中的对象的地址。

  • MYSQL_ERRNO

    语句错误数,从陈述诊断区。

  • RETURNED_SQLSTATE

    声明SQLSTATE值,从表诊断区。

  • MESSAGE_TEXT

    语句错误消息,从陈述诊断区。

  • ERRORS

    无论是对于语句时出错。该值是0如果SQLSTATE值开始00(完成)或01(警告)。值1是SQLSTATE值是什么。

  • WARNINGS

    警告的数量,从陈述诊断区。

  • ROWS_AFFECTED

    由语句影响的行数。一个描述的意义影响,看见第27.7.7.1,“mysql_affected_rows()”

  • ROWS_SENT

    由语句返回的行数

  • ROWS_EXAMINED

    行读取存储引擎在执行语句的数量。

  • CREATED_TMP_DISK_TABLES

    Created_tmp_disk_tables状态变量,但具体的声明。

  • CREATED_TMP_TABLES

    Created_tmp_tables状态变量,但具体的声明。

  • SELECT_FULL_JOIN

    Select_full_join状态变量,但具体的声明。

  • SELECT_FULL_RANGE_JOIN

    Select_full_range_join状态变量,但具体的声明。

  • SELECT_RANGE

    Select_range状态变量,但具体的声明。

  • SELECT_RANGE_CHECK

    Select_range_check状态变量,但具体的声明。

  • SELECT_SCAN

    Select_scan状态变量,但具体的声明。

  • SORT_MERGE_PASSES

    Sort_merge_passes状态变量,但具体的声明。

  • SORT_RANGE

    Sort_range状态变量,但具体的声明。

  • SORT_ROWS

    Sort_rows状态变量,但具体的声明。

  • SORT_SCAN

    Sort_scan状态变量,但具体的声明。

  • NO_INDEX_USED

    1如果语句执行表扫描不使用索引,否则为0。

  • NO_GOOD_INDEX_USED

    1如果服务器没有找到好的指标用于声明,否则为0。更多信息,见的描述Extra解释输出为Range checked for each record价值第8.8.2,”解释输出格式”

  • NESTING_EVENT_IDnesting_event_typeNESTING_EVENT_LEVEL

    这三列被用来与其他栏目提供如下信息(非顶层)语句和嵌套语句(在存储程序执行)。

    高水平的陈述:

    OBJECT_TYPE = NULL
    OBJECT_SCHEMA = NULL
    OBJECT_NAME = NULL
    NESTING_EVENT_ID = NULL
    NESTING_EVENT_TYPE = NULL
    NESTING_LEVEL = 0
    

    嵌套语句:

    OBJECT_TYPE = the parent statement object type
    OBJECT_SCHEMA = the parent statement object schema
    OBJECT_NAME = the parent statement object name
    NESTING_EVENT_ID = the parent statement EVENT_ID
    NESTING_EVENT_TYPE = 'STATEMENT'
    NESTING_LEVEL = the parent statement NESTING_LEVEL plus one
    

这个events_statements_current这些指标表:

  • 主键(THREAD_IDevent_id

TRUNCATE TABLE是允许的events_statements_current表它消除了行

25.11.6.2的events_statements_history表

这个events_statements_history表中包含最新的N每个线程的声明事件。价值N是autosized在服务器启动。设置表尺寸明确,设置performance_schema_events_statements_history_size在服务器启动系统变量。声明事件不会添加到表直到结束。当添加新的事件,大的事件被丢弃如果桌上摆满了。

这个events_statements_history表具有相同的结构events_statements_current,包括索引。看到第25.11.6.1,“events_statements_current表”

TRUNCATE TABLE是允许的events_statements_history表它消除了行

关于声明事件收集的配置信息,看第25.11.6,绩效模式声明事件表”

25.11.6.3的events_statements_history_long表

这个events_statements_history_long表中包含最新的N我的意思是。价值N是autosized在服务器启动。设置表尺寸明确,设置performance_schema_events_statements_history_long_size在服务器启动系统变量。声明事件不会添加到表直到结束。当添加新的事件,大的事件被丢弃如果桌上摆满了。当一个线程结束,其行从表中删除。

这个events_statements_history_long表具有相同的结构events_statements_current,除了它没有索引。看到第25.11.6.1,“events_statements_current表”

TRUNCATE TABLE是允许的events_statements_history_long表它消除了行

关于声明事件收集的配置信息,看第25.11.6,绩效模式声明事件表”

25.11.6.4的prepared_statements_instances表

性能架构提供的准备好的语句的仪器,其中有两个协议:

性能模式声明仪器涵盖协议。下面的讨论是指服务器的命令而不是C API函数或SQL语句。

准备好的语句的信息是可用的prepared_statements_instances表这张桌子可以编制报表服务器使用的检查和对他们提供汇总的统计数据。控制该表的大小,设置performance_schema_max_prepared_statements_instances在服务器启动系统变量。

准备好的语句的信息收集取决于下表中显示的报表工具。这些仪器是默认启用。修改,更新setup_instruments

仪器服务器命令
statement/com/PrepareCOM_STMT_PREPARE
statement/com/ExecuteCOM_STMT_EXECUTE
statement/sql/prepare_sqlSQLCOM_PREPARE
statement/sql/execute_sqlSQLCOM_EXECUTE

绩效管理的内容架构prepared_statements_instances表如下:

  • 表的编制

    COM_STMT_PREPAREsqlcom _准备命令在服务器中创建一个准备好的声明。如果语句是成功地安装了,新的一行添加到prepared_statements_instances表如果声明不能使用,Performance_schema_prepared_statements_lost状态变量是递增的

  • 准备执行语句

    执行一个COM_STMT_EXECUTEsqlcom _准备一个仪表声明命令更新相应的实例prepared_statements_instances表格行

  • 事先准备好的声明中释放

    执行一个COM_STMT_CLOSEsqlcom _释放_ prepare一个仪表声明实例命令删除相应的prepared_statements_instances表格行。要避免资源泄漏,去除发生即使声明仪器前面描述的是残疾人。

这个prepared_statements_instances这些列的表:

  • OBJECT_INSTANCE_BEGIN

    在仪表声明存储器地址。

  • STATEMENT_ID

    由服务器分配的内部声明的ID。文本和二进制协议的入侵检测系统使用声明。

  • STATEMENT_NAME

    对于二进制协议,本栏目NULL。对于文本协议,本栏目是由用户指定的外部声明的名字。例如,下面的SQL语句,该声明的名称是支撑

    PREPARE stmt FROM 'SELECT 1';
    
  • SQL_TEXT

    该声明的文本,与?placeholder标记。

  • OWNER_THREAD_IDowner_event_id

    这些列显示了事先准备好的声明事件。

  • OWNER_OBJECT_TYPEowner_object_schemaOWNER_OBJECT_NAME

    对于一个准备好的声明由客户端会话创建的,这些列NULL。对于一个准备好的声明由一个存储程序创建的,这些列点存储的程序。一个典型的用户错误是忘记释放的准备好的语句。这些列可以存储的程序漏洞的准备好的语句:

    选择owner_object_type,owner_object_schema,owner_object_name,statement_name,sql_textfrom performance_schema.prepared_statements_instanceswhere owner_object_type不空;
  • TIMER_PREPARE

    花的时间执行报表本身。

  • COUNT_REPREPARE

    时代的语句数重修后内部(见8.10.3节,“缓存的准备好的语句和存储的程序”)。对于复配时的统计是不可用,因为它是作为执行语句的一部分,而不是作为一个单独的操作。

  • COUNT_EXECUTEsum_timer_executeMIN_TIMER_EXECUTEavg_timer_executeMAX_TIMER_EXECUTE

    统计汇总的事先准备好的声明的执行。

  • SUM_xxx

    剩下的SUM_xxx列是相同的报表汇总表(见第25.11.15.3,“报表汇总表”

这个prepared_statements_instances这些指标表:

  • 主键(OBJECT_INSTANCE_BEGIN

  • 索引STATEMENT_ID

  • 索引STATEMENT_NAME

  • 索引OWNER_THREAD_IDowner_event_id

  • 索引OWNER_OBJECT_TYPEowner_object_schemaOWNER_OBJECT_NAME

TRUNCATE TABLE重置的数据列prepared_statements_instances

25.11.7性能模式交易表

性能架构工具的交易。在事件层次,等待事件窝在舞台活动,窝在声明事件,窝内交易事件。

这些表店交易事件:

以下各节描述的交易事件表。也有汇总表,汇总信息交易事件;看第25.11.15.5、交易汇总表”

交易活动的配置

控制交易事件集合,集合的相关工具和消费者的状态:

  • 这个setup_instruments表包含一个工具叫交易。使用此工具来启用或禁用交易事件集合。

  • 这个setup_consumers表中对应于当前和近期的交易事件表的名称命名的消费价值观。使用这些消费者过滤交易事件集合。

这个transaction仪器和events_transactions_currentevents_transactions_history交易的消费者是默认启用:

MySQL的>SELECT NAME, ENABLED, TIMED FROM setup_instrumentsWHERE NAME = 'transaction';------------- --------- ------- |名字|启用|定时| ------------- --------- ------- |交易|是|是| ------------- --------- ------- MySQL >SELECT * FROM setup_consumersWHERE NAME LIKE '%transactions%';---------------------------------- --------- |名字|启用| ---------------------------------- --------- | events_transactions_current |是| | events_transactions_history |是| | events_transactions_history_long |没有| ---------------------------------- ---------

在服务器启动交易事件的采集控制,用这样的诗句在你my.cnf文件:

  • 启用:

    [mysqld]
    performance-schema-instrument='transaction=ON'
    performance-schema-consumer-events-transactions-current=ON
    performance-schema-consumer-events-transactions-history=ON
    performance-schema-consumer-events-transactions-history-long=ON
    
  • 禁用:

    [mysqld]
    performance-schema-instrument='transaction=OFF'
    performance-schema-consumer-events-transactions-current=OFF
    performance-schema-consumer-events-transactions-history=OFF
    performance-schema-consumer-events-transactions-history-long=OFF
    

在运行时控制交易事件收集,更新setup_instrumentssetup_consumers

  • 启用:

    UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
    WHERE NAME = 'transaction';
    UPDATE setup_consumers SET ENABLED = 'YES'
    WHERE NAME LIKE '%transactions%';
    
  • 禁用:

    UPDATE setup_instruments SET ENABLED = 'NO', TIMED = 'NO'
    WHERE NAME = 'transaction';
    UPDATE setup_consumers SET ENABLED = 'NO'
    WHERE NAME LIKE '%transactions%';
    

收集交易事件只对特定的交易事件表,使transaction仪器只有交易的消费者所需的相应表。

有关配置事件收集,看25.3节,“性能模式启动配置”,和25.4节,“性能模式运行时配置”

事务边界

在MySQL服务器,交易开始明确这些语句:

START TRANSACTION | BEGIN | XA START | XA BEGIN

交易也开始暗中。例如,当autocommit系统变量是启用的,每个语句的开始一个新的交易。

什么时候autocommit是残疾人,后致力于交易标志着一个新的交易开始的第一个语句。随后的声明是交易的一部分,直到它承诺。

明确这些语句结束交易:

COMMIT | ROLLBACK | XA COMMIT | XA ROLLBACK

交易也暗示,通过执行DDL语句,锁定报表,以及服务器管理报表。

在下面的讨论中,引用START TRANSACTION也适用于BEGINXA START,和XA BEGIN。同样,引用COMMITROLLBACK适用于XA COMMITXA ROLLBACK,分别

性能模式定义了事务边界同样的服务器。事务的开始和结束事件密切配合在服务器中的相应的状态转换:

  • 一个明确的开始交易,交易事件开始处理的过程中START TRANSACTION声明

  • 一个隐式开始交易,交易事件开始在第一个语句使用事务处理引擎在之前的交易已经结束。

  • 任何交易,无论是显式或隐式地结束,交易活动结束时,服务器转换出来的活跃的交易状态的处理过程COMMITROLLBACK

这种方法有微妙的影响:

  • 在性能模式交易事件并不完全包括与之相应的声明事件START TRANSACTIONCOMMIT,或ROLLBACK声明.有一个平凡的时间重叠之间的交易活动,这些陈述。

  • 陈述与非事务性的引擎已经在连接的事务状态无影响。隐式交易,交易活动开始的第一个语句使用事务处理引擎。这意味着报表操作完全忽略非事务表,甚至以下START TRANSACTION

例如,考虑下面的情况:

1. SET autocommit = OFF;
2. CREATE TABLE t1 (a INT) ENGINE = InnoDB;
3. START TRANSACTION;                       -- Transaction 1 START
4. INSERT INTO t1 VALUES (1), (2), (3);
5. CREATE TABLE t2 (a INT) ENGINE = MyISAM; -- Transaction 1 COMMIT
                                            -- (implicit; DDL forces commit)
6. INSERT INTO t2 VALUES (1), (2), (3);     -- Update nontransactional table
7. UPDATE t2 SET a = a + 1;                 -- ... and again
8. INSERT INTO t1 VALUES (4), (5), (6);     -- Write to transactional table
                                            -- Transaction 2 START (implicit)
9. COMMIT;                                  -- Transaction 2 COMMIT

从服务器的角度来看,交易结束时,表1t2创建。交易2不到事务表的访问开始,尽管其间的更新非事务表。

从绩效模式来看,交易2开始时服务器转换成活跃的交易状态。表6和7不包括在交易2的界限,这与服务器如何写交易的二进制日志一致。

电子交易

三属性定义事务:

减少交易的仪器的复杂性,并确保收集交易数据提供完整的、有意义的结果,所有的交易都使用独立的接入方式,隔离级别,或自动提交模式。

选择性地检查交易历史,在交易中使用事件表的属性列:ACCESS_MODEisolation_level,和AUTOCOMMIT

交易的仪器可以降低成本的各种方式,如启用或禁用事务仪表根据用户、帐户,主机,或线程(客户端连接)。

交易和嵌套的事件

一个交易事件家长发起交易事件。一个明确的开始交易,这包括START TRANSACTIONCOMMIT AND CHAIN声明.一个隐式开始交易,这是第一个语句使用事务机前交易结束后。

总的来说,交易是在交易过程中的所有事件引发的顶级父,包括陈述,明确结束事务等COMMITROLLBACK。例外的是语句隐式结束事务,如DDL语句,在这种情况下,目前的交易必须承诺在新的语句被执行。

交易和存储的程序

交易和存储程序事件相关的如下:

  • 存储过程

    存储过程是独立运作的交易。存储过程可以在一个事务开始,和交易可以开始或结束在一个存储过程。如果在一个事务内,存储过程可执行语句,强迫犯父事务然后开始一个新的交易。

    如果存储过程是在交易开始,交易是存储过程事件的父。

    如果一个交易是由存储过程开始,存储过程是交易活动的家长。

  • 存储功能

    存储的功能受到限制,造成显式或隐式提交或回滚。存储功能的事件可以驻留在一个父事务事件。

  • 触发器

    触发激活一个语句访问表与它相关的那一部分,所以一个触发事件的父母总是激活它的语句。

    触发器不能问题陈述,导致一个显式或隐式提交或回滚一个事务。

  • 预定的事件

    在预定的事件体的语句的执行发生在一个新的连接。一个预定的事件在父事务嵌套是不适用的。

交易和保存点

SAVEPOINT语句被记录作为单独的声明事件。交易活动包括单独的计数器SAVEPOINTROLLBACK TO SAVEPOINT,和RELEASE SAVEPOINT在交易期间发表声明

交易错误

错误和警告,发生在一个交易记录在声明事件,但没有相应的交易活动。这包括特定交易的错误和警告,如在非事务表或gtid一致性错误回滚。

25.11.7.1的events_transactions_current表

这个events_transactions_current表包含当前交易事件,每个线程的线程显示的最新监测交易活动现状的一行。例如:

MySQL的>SELECT * FROM events_transactions_current LIMIT 1\G*************************** 1。行*************************** thread_id:26 event_id:7 end_event_id:空event_name:交易状态:活跃的trx_id:空gtid:3e11fa47-71ca-11e1-9e33-c80aa9429562:56 xid:空xa_state:空来源:交易。答:150 timer_start:420833537900000 timer_end:空timer_wait:空access_mode:读写isolation_level:可重复读取自动提交:没有number_of_savepoints:0number_of_rollback_to_savepoint:0 number_of_release_savepoint:0 object_instance_begin:空nesting_event_id:6 nesting_event_type:声明

这些含有交易事件列表,events_transactions_current是最基本的。其他的表包含交易事件行逻辑源于当前事件。例如,在events_transactions_historyevents_transactions_history_long表是最近的交易活动的集合,以一个固定的行数。

关于交易事件收集的配置信息,看第25.11.7,绩效模式交易表”

这个events_transactions_current这些列的表:

  • THREAD_IDevent_id

    随着事件和线程的当前事件的事件时,启动相关的线程。这个THREAD_IDevent_id总之唯一标识行的值。没有两行具有相同的值对。

  • END_EVENT_ID

    本栏目设置NULL当事件开始和更新的线程的当前事件时,事件结束。

  • EVENT_NAME

    名称仪器收集的事件。这是一个NAME值从setup_instruments表仪器名称可能有多个部分,形成了一个层次结构,讨论第256,绩效模式仪器的命名约定”

  • STATE

    当前事务的状态。的价值ACTIVE(后START TRANSACTIONBEGIN),坚信的(后COMMIT),或回滚(后ROLLBACK

  • TRX_ID

    未使用的

  • GTID

    的gtid列包含的值gtid_next,它可以是一个匿名AUTOMATIC,或使用格式gtidUUID:数。。。。。。。这是对交易的使用gtid_next=AUTOMATIC,这是所有正常交易的客户,gtid柱变化当事务提交和实际gtid分配。如果gtid_mode要么是打开(放)ON_PERMISSIVE的gtid柱,改变交易的gtid。如果gtid _模式要么是OFFoff_permissive的变化,gtid柱ANONYMOUS

  • XID_FORMAT_ID_ XID gtrid,和XID_BQUAL

    对XA事务的组件标识符。他们有格式描述“第13.3.8.1 XA事务、SQL语法”

  • XA_STATE

    对XA事务的状态。的价值ACTIVE(后XA START),闲置(后XA END),制备(后XA PREPARE),回滚(后XA ROLLBACK),或坚信的(后XA COMMIT

    在一个复制的奴隶,同样的XA事务可以出现在events_transactions_current不同的国家在不同的线程表。这是因为XA事务准备完毕后,它是从应用线程分离,并可以提交或回滚任何线程的奴隶。这个events_transactions_current表格显示最新监测交易事件的线程的当前状态,不更新状态时,线程空闲时。所以XA事务仍然可以显示在制备对原应用线程状态,在它被另一个线程处理。为了确认XA事务仍在PREPARED国家需要恢复,使用XA RECOVER声明而不是性能架构交易表。

  • SOURCE

    名称的源文件包含检测代码产生的事件和文件中的行号,仪表发生。这使您可以检查源代码来确定到底是。

  • TIMER_START_小时比TIMER_WAIT

    明明信息The Unit for these值是(第二picoseconds万亿)。theTIMER_START_小时比值指示当事件时间的开始和结束。TIMER_WAIT是事件经过的时间(持续时间)。

    如果一个事件还没有结束,TIMER_END是当前定时器的值timer_wait经过了迄今为止的时间(TIMER_END?timer_start

    如果一个事件是由仪器产生TIMED = NO、定时信息不收集,和timer_startTIMER_END,和timer_wait都是NULL

    皮秒的作为事件的时间和影响时间值的单位进行讨论,看第25.4.1、绩效架构事件时间”

  • ACCESS_MODE

    交易的接入方式。的价值READ ONLY读写

  • ISOLATION_LEVEL

    事务隔离级别。的价值REPEATABLE READREAD COMMITTEDREAD UNCOMMITTED,或SERIALIZABLE

  • AUTOCOMMIT

    无论autcommit模式使交易开始时。

  • NUMBER_OF_SAVEPOINTSnumber_of_rollback_to_savepointNUMBER_OF_RELEASE_SAVEPOINT

    SAVEPOINTROLLBACK TO SAVEPOINT,和RELEASE SAVEPOINT在交易期间发表声明

  • OBJECT_INSTANCE_BEGIN

    未使用的

  • NESTING_EVENT_ID

    这个EVENT_ID价值的事件在该事件是嵌套。

  • NESTING_EVENT_TYPE

    嵌套事件类型。的价值TRANSACTION声明STAGE,或等待。(TRANSACTION不会因为交易不能嵌套出现。)

这个events_transactions_current这些指标表:

  • 主键(THREAD_IDevent_id

TRUNCATE TABLE是允许的events_transactions_current表它消除了行

25.11.7.2的events_transactions_history表

这个events_transactions_history表中包含最新的N每个线程的交易活动。价值N是autosized在服务器启动。设置表尺寸明确,设置performance_schema_events_transactions_history_size在服务器启动系统变量。交易事件不会添加到表直到结束。当添加新的事件,大的事件被丢弃如果桌上摆满了。

这个events_transactions_history表具有相同的结构events_transactions_current,包括索引。看到第25.11.7.1,“events_transactions_current表”

TRUNCATE TABLE是允许的events_transactions_history表它消除了行

关于交易事件收集的配置信息,看第25.11.7,绩效模式交易表”

25.11.7.3的events_transactions_history_long表

这个events_transactions_history_long表中包含最新的N交易活动。the value ofN是autosized在服务器启动。设置表尺寸明确,设置performance_schema_events_transactions_history_long_size在服务器启动系统变量。交易事件不会添加到表直到结束。当添加新的事件,大的事件被丢弃如果桌上摆满了。当一个线程结束,其行从表中删除。

这个events_transactions_history_long表具有相同的结构events_transactions_current,除了它没有索引。看到第25.11.7.1,“events_transactions_current表”

TRUNCATE TABLE是允许的events_transactions_history_long表它消除了行

关于交易事件收集的配置信息,看第25.11.7,绩效模式交易表”

25.11.8性能模式连接表

当一个客户端连接到MySQL服务器,这样一个特定的用户的名字,从一个特定的主机。性能架构提供了有关这些连接统计,跟踪每个账户(用户和主机组合)以及每个用户名和主机名称,使用这些表格:

  • accounts:连接统计每个客户帐户

  • hosts:连接统计每个客户端的主机名

  • users:连接统计每个客户端的用户名

的意思账户在连接表类似于其在MySQL授权表的意义mysql系统的数据库,在这个意义上,是指结合用户和主机的价值。他们的区别在于,对于发放表,一个帐户的主机部分可以是一个模式,而绩效模式表,主值始终是一个特定的nonpattern主机名。

每个连接表CURRENT_CONNECTIONS总线连接列跟踪当前总的连接数跟踪值在其统计的基础。表中所使用的跟踪值差异。这个accounts用户HOST列跟踪每个用户和主机组合连接。这个usershosts表一用户HOST柱,分别跟踪连接每用户名和主机名。

性能架构也算内部线程和线程的用户会话,没有认证,使用行USER主机列值NULL

假设客户指定user1user2每一次连接hostahostb。性能模式轨道的关系如下:

  • 这个accounts表有四行,为user1/hostauser1/hostbuser2/hosta,和user2/hostb帐户值,每一行每一个帐户的连接数。

  • 这个hosts桌上有两行,为玉簪hostb,每行计数两连接的每个主机名。

  • 这个users桌上有两行,为user1user2,每行计数每用户名连接。

当一个客户端连接,性能架构决定排在每个连接表的应用,使用跟踪值适合每个表。如果没有这样的行,添加一。然后性能模式递增1CURRENT_CONNECTIONS总线连接该行中的列

当客户端断开时,性能下降的一个模式CURRENT_CONNECTIONS列行叶总线连接柱不变

TRUNCATE TABLE是允许连接表。有这些影响:

  • 行删除帐户,主机,或用户没有当前连接(行CURRENT_CONNECTIONS = 0

  • nonremoved行复位只计算当前连接:对于行CURRENT_CONNECTIONS > 0总线连接复位CURRENT_CONNECTIONS

  • 汇总表,取决于连接表被隐式地截断,在本节后面介绍。

性能架构维护汇总表,汇总统计的账户连接,各种事件类型的主机,或用户。这些表_summary_by_account_summary_by_host,或_summary_by_user在名称。识别它们,使用此查询:

MySQL的>SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLESWHERE TABLE_SCHEMA = 'performance_schema'AND TABLE_NAME REGEXP '_summary_by_(account|host|user)'ORDER BY TABLE_NAME;------------------------------------------------------ | table_name | ------------------------------------------------------ | events_errors_summary_by_account_by_error | | events_errors_summary_by_host_by_error | | events_errors_summary_by_user_by_error | | events_stages_summary_by_account_by_event_name | | events_stages_summary_by_host_by_event_name | | events_stages_summary_by_user_by_event_name | | events_statements_summary_by_account_by_event_name | | events_statements_summary_by_host_by_event_name | | events_statements_summary_by_user_by_event_name | | events_transactions_summary_by_account_by_event_name | | events_transactions_summary_by_host_by_event_name | | events_transactions_summary_by_user_by_event_name | | events_waits_summary_by_account_by_event_name | | events_waits_summary_by_host_by_event_name | | events_waits_summary_by_user_by_event_name | | memory_summary_by_account_by_event_name | | memory_summary_by_host_by_event_name | | memory_summary_by_user_by_event_name | ------------------------------------------------------

关于个人联系汇总表的详细信息,查阅本节描述了事件类型表:

TRUNCATE TABLE是允许连接汇总表。删除行的账户,主机,或用户没有连接,并且将摘要列为零,剩余的行。此外,每个汇总表,汇总账户,主机,用户,或线程是隐式的被截断的连接表,它所依赖的。下表描述了连接表截断式的截断表之间的关系。

连接表截断表25.2内隐效应

截断连接表implicitly尾总结表
accounts名称包含表_summary_by_account_summary_by_thread
hosts名称包含表_summary_by_account_summary_by_host_summary_by_thread
users名称包含表_summary_by_account_summary_by_user_summary_by_thread

截断_summary_global汇总表也含蓄地将其对应的连接和螺纹汇总表。例如,截断events_waits_summary_global_by_event_name隐式截断汇总账户,等待事件汇总表的主机,用户,或线。

25.11.8.1帐目表

这个accounts表包含行的每一个帐户,连接到MySQL服务器。为每个帐户,表计数的电流和总连接数。表的大小是autosized在服务器启动。设置表尺寸明确,设置performance_schema_accounts_size在服务器启动系统变量。禁用的帐户统计,这个变量设置为0.。

这个accounts表具有以下列。为说明如何表现的模式保持在该表的行,包括影响TRUNCATE TABLE,看到第25.11.8,绩效模式连接表”

  • USER

    客户端用户名称。这是NULL对于内螺纹,或一个用户会话,认证失败。

  • HOST

    主机的客户端连接。这是NULL对于内螺纹,或一个用户会话,认证失败。

  • CURRENT_CONNECTIONS

    当前帐户的连接数

  • TOTAL_CONNECTIONS

    为帐户连接总数

这个accounts这些指标表:

  • 主键(USER主机

25.11.8.2主机表

这个hosts表包含一个行为每个主机从客户端连接到MySQL服务器。为每个主机名、表计数的电流和总连接数。表的大小是autosized在服务器启动。设置表尺寸明确,设置performance_schema_hosts_size在服务器启动系统变量。禁用主机统计,这个变量设置为0。

这个hosts表具有以下列。为说明如何表现的模式保持在该表的行,包括影响TRUNCATE TABLE,看到第25.11.8,绩效模式连接表”

  • HOST

    主机的客户端连接。这是NULL对于内螺纹,或一个用户会话,认证失败。

  • CURRENT_CONNECTIONS

    目前的主机的连接数

  • TOTAL_CONNECTIONS

    对主机的连接总数

这个hosts这些指标表:

  • 主键(HOST

25.11.8.3用户表

这个users表包含一个行为每个用户连接到MySQL服务器。每个用户名,表计数的电流和总连接数。表的大小是autosized在服务器启动。设置表尺寸明确,设置performance_schema_users_size在服务器启动系统变量。禁用用户统计,这个变量设置为0。

这个users表具有以下列。为说明如何表现的模式保持在该表的行,包括影响TRUNCATE TABLE,看到第25.11.8,绩效模式连接表”

  • USER

    客户端用户名称。这是NULL对于内螺纹,或一个用户会话,认证失败。

  • CURRENT_CONNECTIONS

    当前的用户连接数

  • TOTAL_CONNECTIONS

    总号码是为用户

这个users这些指标表:

  • 主键(USER

25.11.9性能模式连接属性表

应用程序可以提供的键/值对作为连接属性被传递到服务器的连接时间。对于C API,定义属性设置使用mysql_options()mysql_options4()功能.其他MySQL连接器可以提供自己的属性定义方法。

这些表暴露属性信息:

属性名以下划线开头(_)是保留供内部使用,不应该由应用程序创建的。本公约允许新的属性被引入到MySQL应用属性无碰撞。

连接设置的属性可以在给定的连接取决于你的平台和MySQL用于建立连接的连接器。

这个libmysqlclient客户端库(MySQL和MySQL连接器/ C分布设置这些属性提供):

  • _client_name客户:the name(libmysqlfor the Library)客户端

  • _client_version客户:图书馆版

  • _os操作系统(例如,LinuxWin64

  • _pidClient Process id

  • _platform:本机平台(例如,_ x86 64

  • _thread:客户端的线程ID(Windows)

其他MySQL连接器可以定义自己的连接属性。

MySQL连接器/ J定义这些属性:

  • _client_licenseConnectory Lilicese Type

  • _runtime_vendor:java运行环境(JRE)供应商

  • _runtime_version:java运行环境(JRE)版

MySQL连接器/网定义这些属性:

  • _client_version客户:图书馆版

  • _os操作系统(例如,LinuxWin64

  • _pidClient Process id

  • _platform:本机平台(例如,_ x86 64

  • _program_name: The client name

  • _thread:客户端的线程ID(Windows)

PHP定义属性,取决于它是如何编译:

  • 编译使用libmysqlclient标准:thelibmysqlclient属性描述

  • 编译使用mysqlndOnly the_客户_ name属性,以价值mysqlnd

许多MySQL客户端程序设置program_name一个价值等于客户名称属性。例如,mysqladminmysqldump配置program_namemysqladminmysqldump,分别。MySQL的套内核program_namemysqlsh

一些MySQL客户端程序定义附加属性:

  • mysqlbinlog定义_client_role属性binary_log_listener

  • 复制从连接定义program_name作为mysqld_client_role作为binary_log_listener,和_client_replication_channel_nameAs the name频道。

  • FEDERATED存储引擎连接定义program_name作为mysqld_client_role作为federated_storage

在连接从客户端发送到服务器的属性数据量的限制:一个固定的限制的客户端连接之前的时间;固定限制的服务器在连接时间;和一个可配置的限制的性能架构在连接时间。

连接使用C API发起的libmysqlclient图书馆对客户端连接属性数据的总大小限制:调用64kbmysql_options()导致这种限制被超过产生CR_INVALID_PARAMETER_NO误差。其他MySQL连接器可以将自己的客户端限制多少连接属性可以将数据发送到服务器。

在服务器端,这些尺寸检查连接属性数据发生:

  • 服务器在连接属性数据将接受总大小限制为64KB。如果客户端尝试发送多属性数据的64KB,服务器拒绝连接。否则,服务器将属性缓冲区有效跟踪在最长的缓冲区的大小Performance_schema_session_connect_attrs_longest_seen状态变量

  • 对于接受连接,性能架构集合属性的大小对检查的价值performance_schema_session_connect_attrs_size系统变量。如果属性的大小超过此值,这些行为的发生:

    • 性能架构将属性数据和增量Performance_schema_session_connect_attrs_lost状态变量,说明连接的数量属性截断发生。

    • 性能模式将消息写入错误日志如果log_error_verbosity系统变量大于1:

      长连接属性N是truncated(N字节丢失)连接N,用户user_name@host_name(如user_name),授权:{是} |没有

      在警告信息,这些信息是为了帮助DBA识别客户属性截断发生。

    • _truncated属性添加到会话与一个值表示多少字节丢失的属性,如果属性缓冲区有足够的空间。这使得绩效模式暴露的每个连接的截断信息在连接属性表。此信息可不必检查错误日志检查。

25.11.9.1的session_account_connect_attrs表

应用程序可以提供的键/值连接属性被传递到服务器的连接时,使用mysql_options()mysql_options4()C API函数。对于常见的属性描述,看第25.11.9,绩效模式连接属性表”

这个session_account_connect_attrs表只包含自己的帐户,会话的连接属性。看到所有的会话连接的属性,看在session_connect_attrs

这个session_account_connect_attrs表包含这些列:

  • PROCESSLIST_ID

    会话标识符的连接

  • ATTR_NAME

    属性名称

  • ATTR_VALUE

    属性值

  • ORDINAL_POSITION

    为了在该属性被添加到连接属性的设置。

这个session_account_connect_attrs这些指标表:

  • 主键(PROCESSLIST_ID电话号码

TRUNCATE TABLE是不允许的session_account_connect_attrs

25.11.9.2会议_连接_ attrs表

应用程序可以提供的键/值连接属性被传递到服务器的连接时,使用mysql_options()mysql_options4()C API函数。对于常见的属性描述,看第25.11.9,绩效模式连接属性表”

这个session_connect_attrs表包含所有会话的连接属性。看连接属性仅对会议为自己的账户,看在session_account_connect_attrs

这个session_connect_attrs表包含这些列:

  • PROCESSLIST_ID

    会话标识符的连接

  • ATTR_NAME

    属性名称

  • ATTR_VALUE

    属性值

  • ORDINAL_POSITION

    为了在该属性被添加到连接属性的设置。

这个session_connect_attrs这些指标表:

  • 主键(PROCESSLIST_ID电话号码

TRUNCATE TABLE是不允许的session_connect_attrs

25.11.10性能模式用户变量表

性能架构提供了一个user_variables_by_thread表暴露用户定义的变量。这些都是在一个特定的会话中定义的变量,包括@前面的字符的名称;看4节,“用户定义的变量

这个user_variables_by_thread表包含这些列:

  • THREAD_ID

    线程标识符的会话中的变量定义。

  • VARIABLE_NAME

    变量名,没有领导@人物

  • VARIABLE_VALUE

    变量的值

这个user_variables_by_thread这些指标表:

  • 主键(THREAD_ID_ name变量

TRUNCATE TABLE是不允许的user_variables_by_thread

25.11.11性能架构复制表

性能架构提供表格,将复制的信息。这是类似于从现有的信息SHOW SLAVE STATUS声明,但表示在表格的形式更容易具有可用性的好处:

  • SHOW SLAVE STATUS输出是有用的检查,但没有这么多的编程使用。相比之下,使用性能模式表,关于奴隶的身份可以搜索使用一般SELECT查询,包括复杂的哪里条件、条件和命运

  • 查询结果可以保存在表作进一步的分析,或分配给变量,用于存储过程。

  • 复制表提供更好的诊断信息。多线程从操作,SHOW SLAVE STATUS报告所有的协调员和工作线程错误使用最后_ SQL _ errnoLast_SQL_Error领域,所以只有最近的那些错误是可见的,会丢失信息。复制表存储错误的每个线程的基础上而不丢失信息。

  • 最后一次看到交易是可见的在复制表上的每一个员工的基础。这是从信息不可用SHOW SLAVE STATUS

  • 开发商熟悉性能架构接口可扩展复制表添加行的表提供了额外的信息。

复制桌

性能架构提供了以下复制相关表:

以下的性能架构复制表继续填充性能模式时禁用:

唯一的例外是本地时间信息(交易的开始和结束时间戳)在复制表replication_connection_statusreplication_applier_status_by_coordinator,和replication_applier_status_by_worker。此信息不收集性能模式时禁用。

以下各节详细描述每个复制表,包括所列的对应关系SHOW SLAVE STATUS和复制的表列中显示同样的信息。

本文介绍复制表的其余部分介绍了如何填充性能模式和领域SHOW SLAVE STATUS不代表表

复制表的生命周期

性能架构填充复制表如下:

  • 执行之前CHANGE MASTER TO,桌子是空的

  • CHANGE MASTER TO,配置参数可以在表见。在这个时候,有没有主动从线程,所以thread_idNULLservice_state列的值OFF

  • START SLAVE,非—无效的THREAD_ID值可以看出。这是懒惰的或活动的线程有一个service_state价值ON。连接到主服务器的线程都有一个值连接同时建立连接,并ON此后只要lasts的网络。

  • STOP SLAVE,的thread_id列成NULLservice_state柱线不再存在有价值OFF

  • 表保存后STOP SLAVE由于一个错误或线程死亡。

  • 这个replication_applier_status_by_worker桌子是空的只有当奴隶是在多线程模式下运行。就是说,如果slave_parallel_workers系统变量大于0,此表是密集的时START SLAVE被执行,和行数显示工人的数量。

不在复制表显示的奴隶状态信息

在性能模式复制表中的信息可从信息有所不同SHOW SLAVE STATUS由于表是面向使用全局事务标识符(gtids),而不是文件名和位置,以及他们所代表的服务器的UUID值,不是服务器ID值。由于这些差异,几SHOW SLAVE STATUS列不保存在性能模式复制表,或代表一种不同的方式:

  • 以下字段是指文件的名称和位置,不保留:

    Master_Log_File
    Read_Master_Log_Pos
    Relay_Log_File
    Relay_Log_Pos
    Relay_Master_Log_File
    Exec_Master_Log_Pos
    Until_Condition
    Until_Log_File
    Until_Log_Pos
    
  • 这个Master_Info_File场不保存。它指的是master.info文件用于奴隶主的信息库,它已被安全从表取代。

  • 以下领域的基础上server_id,不server_uuid,和不保留:

    硕士学位_服务器_ idreplicate _不知道_ _ IDS服务器
  • 这个Skip_Counter场是基于事件计数,不gtids,不保存。

  • 这些错误字段别名Last_SQL_Errnolast_sql_error,所以他们不保留:

    Last_Errno
    Last_Error
    

    在性能模式,这个错误信息是可用的LAST_ERROR_NUMBERlast_error_message列的replication_applier_status_by_coordinator表(和replication_applier_status_by_worker如果奴隶是多线程)。这些表提供更具体的每个线程的错误信息比从最后_ errnoLast_Error

  • 领域,提供命令行过滤选项信息不保存:

    Replicate_Do_DB
    Replicate_Ignore_DB
    Replicate_Do_Table
    Replicate_Ignore_Table
    Replicate_Wild_Do_Table
    Replicate_Wild_Ignore_Table
    
  • 这个Slave_IO_Stateslave_sql_running_state字段不保存。如果需要,可以将这些值从进程列表通过使用THREAD_ID适当的复制表的列和连接它与身份证件列在INFORMATION_SCHEMAPROCESSLIST表选择状态column of the latter表。

  • 这个Executed_Gtid_Set字段可以显示大量文本大集合。相反,绩效模式表显示当前正在被应用gtids奴隶交易。另外,执行gtids可以从得到的值集gtid_executed系统变量

  • 这个Seconds_Behind_Masterrelay_log_space领域是被决定的地位和不保留。

状态变量移动到复制表

作为5.7.5 MySQL版本,下面的状态变量(以前监测中的应用SHOW STATUS)被转移到性能模式复制表:

这些状态变量相关时,现在只有单一复制通道是因为他们只有报告的默认复制渠道现状。当多个复制通道的存在,使用性能架构复制表本节所述,报告这些变量为每个现有的复制通道。

复制通道

的复制性能模式表的第一列CHANNEL_NAME。这使得表是每复制通道。在一个非多源复制设置有一个默认的复制通道。当你使用多个复制通道的一个奴隶,你可以过滤每复制通道的表来监控特定复制通道。看到第17.2.3,“复制通道”第17.1.4.3,“监控”多源复制更多信息

25.11.11.1 the复制_连接_配置表

此表显示了通过从服务器用于连接到主服务器的配置参数。存储在表中的参数可以在运行时的变化CHANGE MASTER TO你的声明,表示in the column描述。

相比于replication_connection_status表,replication_connection_configuration变化较少。它包含的值定义如何从连接到主仍然不断在连接,而replication_connection_status包含一些值,在连接

这个replication_connection_configuration这些列的表:

  • CHANNEL_NAME

    复制通道,该行显示。总是有一个默认的复制通道,并复制通道可以增加更多的。看到第17.2.3,“复制通道”更多信息

  • HOST

    主人主人,奴隶是连接。(CHANGE MASTER TO选项:master_host

  • PORT

    端口用于连接到主。(CHANGE MASTER TO选项:master_port

  • USER

    连接到主机使用的帐户的用户名称。(CHANGE MASTER TO选项:master_user

  • NETWORK_INTERFACE

    认为奴隶是绑定到网络接口,如果任何。(CHANGE MASTER TO选项:主_绑定

  • AUTO_POSITION

    如果是在1 autopositioning使用;否则为0。(CHANGE MASTER TO选项:master_auto_position

  • SSL_ALLOWED这_ SSL _文件SSL_CA_PATHssl_certificateSSL_CIPHER_ SSL密钥SSL_VERIFY_SERVER_CERTIFICATEssl_crl_fileSSL_CRL_PATH

    这些列显示由奴隶用来连接主SSL参数,如果任何。

    SSL_ALLOWED这些价值观:

    • Yes如果一个SSL连接到主是允许的

    • No如果一个SSL连接到主是不允许的

    • Ignored如果一个SSL连接是允许的但从服务器没有启用SSL的支持

    CHANGE MASTER TO对于其他的SSL列选项:硕士学位MASTER_SSL_CAPATH主_ _ SSL证书MASTER_SSL_CIPHERmaster_ssl_crlMASTER_SSL_CRLPATH硕士_ SSL _ keyMASTER_SSL_VERIFY_SERVER_CERT

  • CONNECTION_RETRY_INTERVAL

    之间的秒数连接重试。(CHANGE MASTER TO选项:master_connect_retry

  • CONNECTION_RETRY_COUNT

    时代的奴隶可以尝试重新连接在连接丢失事件的总体数量。(CHANGE MASTER TO选项:硕士_ _重试计数

  • HEARTBEAT_INTERVAL

    在从复制心跳间隔时间,单位为秒。

  • TLS_VERSION

    用在主的TLS版本。TLS的版本信息,看第6.4.6,“加密连接协议和密码”

  • PUBLIC_KEY_PATH

    一种含有一个由RSA密钥对的密码交换所必须掌握的公共密钥从复制文件的路径名。该文件必须在PEM格式。本栏适用于奴隶的鉴定与sha256_passwordcaching_sha2_password身份验证插件

    如果PUBLIC_KEY_PATH给出指定有效的公钥文件,它将优先于get_public_key

  • GET_PUBLIC_KEY

    无论是从主人的RSA密钥对的公钥密码交换所需的基础要求。本栏适用于奴隶的鉴定与caching_sha2_password身份验证插件。这个插件,师傅不发送公钥除非要求。

    如果PUBLIC_KEY_PATH给出指定有效的公钥文件,它将优先于get_public_key

这个replication_connection_configuration这些指标表:

  • 主键(CHANNEL_NAME

TRUNCATE TABLE是不允许的replication_connection_configuration

下表显示的对应关系replication_connection_configurationSHOW SLAVE STATUS专栏

replication_connection_configuration专栏SHOW SLAVE STATUS专栏
HOSTMaster_Host
PORTMaster_Port
USERMaster_User
NETWORK_INTERFACEMaster_Bind
AUTO_POSITIONAuto_Position
SSL_ALLOWEDMaster_SSL_Allowed
SSL_CA_FILEMaster_SSL_CA_File
SSL_CA_PATHMaster_SSL_CA_Path
SSL_CERTIFICATEMaster_SSL_Cert
SSL_CIPHERMaster_SSL_Cipher
SSL_KEYMaster_SSL_Key
SSL_VERIFY_SERVER_CERTIFICATEMaster_SSL_Verify_Server_Cert
SSL_CRL_FILEMaster_SSL_Crl
SSL_CRL_PATHMaster_SSL_Crlpath
CONNECTION_RETRY_INTERVALConnect_Retry
CONNECTION_RETRY_COUNTMaster_Retry_Count
TLS_VERSIONMaster_TLS_Version
PUBLIC_KEY_PATHMaster_public_key_path
GET_PUBLIC_KEYGet_master_public_key

25 . 2.11.11.2 . The re复制y Connection Connection - Status Table

该表显示I/O线程处理从服务器连接到主服务器的当前状态,在最后的交易信息排队在中继日志信息的交易目前在中继日志队列。

相比于replication_connection_configuration表,replication_connection_status变化频繁。它包含的值变化时的连接,而replication_connection_configuration包含值定义了奴隶与主人,在连接保持不变。

这个replication_connection_status这些列的表:

  • CHANNEL_NAME

    复制通道,该行显示。总是有一个默认的复制通道,并复制通道可以增加更多的。看到第17.2.3,“复制通道”更多信息

  • GROUP_NAME

    如果此服务器是一个组的成员,显示服务器所属的组名称。

  • SOURCE_UUID

    这个server_uuid从硕士的价值

  • THREAD_ID

    I/O线程ID

  • SERVICE_STATE

    ON(线程的存在和活动或空闲),关闭(线程不再存在),或CONNECTING(线程的存在并连接到主)。

  • RECEIVED_TRANSACTION_SET

    全球交易系统的设置(gtids)对应的从属收到的所有交易。如果不使用空gtids。看到gtid集更多信息

  • LAST_ERROR_NUMBERlast_error_message

    导致I/O线程停止最新的错误消息的错误号和错误。0、传递空字符串平均错误数没有错误如果LAST_ERROR_MESSAGE价值不是空的,误差值也出现在奴隶的错误日志。

    发行RESET MASTERRESET SLAVE在这些列中显示的值重置。

  • LAST_ERROR_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示在最近的I/O错误发生。

  • LAST_HEARTBEAT_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示最近的时候心跳信号被复制从收到。

  • COUNT_RECEIVED_HEARTBEATS

    心跳信号,自上次重新启动或复位接收复制奴隶总数,或CHANGE MASTER TO声明发表

  • LAST_QUEUED_TRANSACTION

    全局事务ID(gtid)的最后一个交易,排队的中继日志。

  • LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当最后交易排队在中继日志是在原来的主人的承诺。

  • LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当最后交易排队在中继日志在即时掌握犯。

  • LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当最后交易放在中继日志队列的I/O线程。

  • LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当最后交易排队中继日志文件。

  • QUEUEING_TRANSACTION

    全局事务ID(gtid)在中继日志目前排队交易。

  • QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示在目前排队交易是在原来的主人的承诺。

  • QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示在目前排队交易是直接掌握犯。

  • QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示在目前排队交易第一事件写入中继日志的I/O线程。

当性能模式被禁用,本地时间信息不收集,所以字段显示排队交易的开始和结束时间戳是零。

这个replication_connection_status这些指标表:

  • 主键(CHANNEL_NAME

  • 索引THREAD_ID

下表显示的对应关系replication_connection_statusSHOW SLAVE STATUS专栏

replication_connection_status专栏SHOW SLAVE STATUS专栏
SOURCE_UUIDMaster_UUID
THREAD_ID
SERVICE_STATESlave_IO_Running
RECEIVED_TRANSACTION_SETRetrieved_Gtid_Set
LAST_ERROR_NUMBERLast_IO_Errno
LAST_ERROR_MESSAGELast_IO_Error
LAST_ERROR_TIMESTAMPLast_IO_Error_Timestamp

25.11.11.3的replication_applier_configuration表

该表说明,影响交易的从属服务器应用配置参数。存储在表中的参数可以在运行时的变化CHANGE MASTER TO你的声明,表示in the column描述。

这个replication_applier_configuration这些列的表:

这个replication_applier_configuration这些指标表:

  • 主键(CHANNEL_NAME

TRUNCATE TABLE是不允许的replication_applier_configuration

下表显示的对应关系replication_applier_configuration SHOW SLAVE STATUS专栏

replication_applier_configuration专栏SHOW SLAVE STATUS专栏
DESIRED_DELAYSQL_Delay

25.11.11.4的replication_applier_status表

此表显示了目前通用的交易执行状况对从属服务器。该表提供了有关交易的应用现状是不特定的任何线程所涉及的一般方面的信息。线程的状态信息是可用的replication_applier_status_by_coordinator表(和replication_applier_status_by_worker如果奴隶是多线程)

这个replication_applier_status这些列的表:

  • CHANNEL_NAME

    复制通道,该行显示。总是有一个默认的复制通道,并复制通道可以增加更多的。看到第17.2.3,“复制通道”更多信息

  • SERVICE_STATE

    演出ON当复制通道的应用线程活动或空闲,关闭意味着应用线程不活跃。

  • REMAINING_DELAY

    如果奴隶是等待DESIRED_DELAY秒通过自主应用交易,此字段包含延迟秒数。在其他时候,这场无效的。(theDESIRED_DELAY值存储在replication_applier_configurationtable)第17.3.11,“延迟复制”更多信息

  • COUNT_TRANSACTIONS_RETRIES

    显示重试,是因为从SQL线程失败申请交易数量。对于一个给定的交易最大重试次数是由slave_transaction_retries系统变量

这个replication_applier_status这些指标表:

  • 主键(CHANNEL_NAME

TRUNCATE TABLE是不允许的replication_applier_status

下表显示的对应关系replication_applier_statusSHOW SLAVE STATUS专栏

replication_applier_status专栏SHOW SLAVE STATUS专栏
SERVICE_STATE
REMAINING_DELAYSQL_Remaining_Delay

25.11.11.5的replication_applier_status_by_coordinator表

一个多线程的奴隶,奴隶使用多线程和线程管理协调员,这表显示协调线程的状态。对于单线程的奴隶,这张桌子是空的。一个多线程的奴隶,replication_applier_status_by_worker表显示工作线程的状态。本表提供了有关过去的交易是由缓冲协调线程一个工人的队列信息,以及交易目前缓冲。开始的时间戳是指当该线程读取事务的第一个事件从中继日志缓冲区到工人的队列,而结束时间是指当最后事件完成对工人的队列缓冲。

这个replication_applier_status_by_coordinator这些列的表:

  • CHANNEL_NAME

    复制通道,该行显示。总是有一个默认的复制通道,并复制通道可以增加更多的。看到第17.2.3,“复制通道”更多信息

  • THREAD_ID

    SQL /协调线程ID。

  • SERVICE_STATE

    ON(线程的存在和活动或空闲)或关闭(线程不再存在)

  • LAST_ERROR_NUMBERlast_error_message

    导致SQL /协调线程停止最新的错误消息的错误号和错误。0、信息是一个空字符串错误数没有错误。如果LAST_ERROR_MESSAGE价值不是空的,误差值也出现在奴隶的错误日志。

    发行RESET MASTERRESET SLAVE在这些列中显示的值重置。

    所有的错误代码和消息显示在LAST_ERROR_NUMBERlast_error_message列对应列在误差值第三,“服务器错误代码和消息”

  • LAST_ERROR_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示时出现最新的SQL /协调误差。

  • LAST_PROCESSED_TRANSACTION

    在全局事务标识符(gtid)的货物交易处理本coordinator。

  • LAST_PROCESSED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当最后交易处理这种协调是在原来的主人的承诺。

  • LAST_PROCESSED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当最后交易处理这种协调在即时掌握犯。

  • LAST_PROCESSED_TRANSACTION_START_BUFFER_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当这个协调线程开始写最后交易到一个工作者线程缓冲区。

  • LAST_PROCESSED_TRANSACTION_END_BUFFER_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当最后交易写一个工作线程的线程缓冲区协调员。

  • PROCESSING_TRANSACTION

    全局事务ID(gtid)的交易,这是目前处理协调线程。

  • PROCESSING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示在目前处理的交易是在原来的主人的承诺。

  • PROCESSING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示在目前处理的交易是即时掌握犯。

  • PROCESSING_TRANSACTION_START_BUFFER_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当这个协调线程开始写当前事务处理到一个工作者线程缓冲区。

当性能模式被禁用,本地时间信息不收集,所以字段显示缓冲交易的开始和结束时间戳是零。

这个replication_applier_status_by_coordinator这些指标表:

  • 主键(CHANNEL_NAME

  • 索引THREAD_ID

下表显示的对应关系replication_applier_status_by_coordinatorSHOW SLAVE STATUS专栏

replication_applier_status_by_coordinator专栏SHOW SLAVE STATUS专栏
THREAD_ID
SERVICE_STATESlave_SQL_Running
LAST_ERROR_NUMBERLast_SQL_Errno
LAST_ERROR_MESSAGELast_SQL_Error
LAST_ERROR_TIMESTAMPLast_SQL_Error_Timestamp

25.11.11.6的replication_applier_status_by_worker表

如果奴隶不是多线程的,这表显示的应用线程的状态。否则,奴隶使用多线程和线程管理协调员,这表显示工作线程的状态。一个多线程的奴隶,replication_applier_status_by_coordinator表显示协调线程的状态。此表提供有关交易的应用细节,在开始的时间戳是指当工人开始实施的第一个项目,和结束时间戳是指当交易的最后一个事件的应用。

这个replication_applier_status_by_worker这些列的表:

  • CHANNEL_NAME

    复制通道,该行显示。总是有一个默认的复制通道,并复制通道可以增加更多的。看到第17.2.3,“复制通道”更多信息

  • WORKER_ID

    工人的标识符(为相同的值id列在mysql.slave_worker_info目录(续)后STOP SLAVE,的thread_id柱变NULL,但worker_id值保留

  • THREAD_ID

    辅助线程ID

  • SERVICE_STATE

    ON(线程的存在和活动或空闲)或关闭(线程不再存在)

  • LAST_ERROR_NUMBERlast_error_message

    导致线程停止最近的错误消息的错误号和错误。0、传递空字符串平均错误数没有错误。如果LAST_ERROR_MESSAGE价值不是空的,误差值也出现在奴隶的错误日志。

    发行RESET MASTERRESET SLAVE在这些列中显示的值重置。

    所有的错误代码和消息显示在LAST_ERROR_NUMBERlast_error_message列对应列在误差值第三,“服务器错误代码和消息”

  • LAST_ERROR_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示时出现的最新工人的错误。

  • LAST_APPLIED_TRANSACTION

    全局事务ID(gtid)的最后一个交易的人员应用。

  • LAST_APPLIED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当最后交易采用该职工在原主人的承诺。

  • LAST_APPLIED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当最后交易适用于该工人在即时掌握犯。

  • LAST_APPLIED_TRANSACTION_START_APPLY_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当工人开始将过去应用事务。

  • LAST_APPLIED_TRANSACTION_END_APPLY_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当这个工人完成应用上应用事务。

  • APPLYING_TRANSACTION

    全局事务ID(gtid)交易的这名工人目前正在申请。

  • APPLYING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当这个工人目前正在申请交易是在原来的主人的承诺。

  • APPLYING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当这个工人目前正在申请交易的即时掌握犯。

  • APPLYING_TRANSACTION_START_APPLY_TIMESTAMP

    一个时间戳'YYYY-MM-DD HH:MM:SS[.fraction]'格式显示当工人开始应用,目前正在申请交易。

当性能模式被禁用,本地时间信息不收集,因此应用领域展示交易的开始和结束时间戳是零。

这个replication_applier_status_by_worker这些指标表:

  • 主键(CHANNEL_NAMEworker_id

  • 索引THREAD_ID

下表显示的对应关系replication_applier_status_by_workerSHOW SLAVE STATUS专栏

replication_applier_status_by_worker专栏SHOW SLAVE STATUS专栏
WORKER_ID
THREAD_ID
SERVICE_STATE
LAST_ERROR_NUMBERLast_SQL_Errno
LAST_ERROR_MESSAGELast_SQL_Error
LAST_ERROR_TIMESTAMPLast_SQL_Error_Timestamp

25.11.11.7的replication_applier_global_filters表

此表显示全球复制配置的过滤器上的奴隶。这个replication_applier_global_filters表具有以下列:

  • FILTER_NAME

    复制的过滤器,已配置的类型。

  • FILTER_RULE

    规则配置为使用复制型滤波器--replicate-*命令选项或CHANGE REPLICATION FILTER

  • CONFIGURED_BY

    该方法用于配置复制器,可以是一个:

    • CHANGE_REPLICATION_FILTER通过使用一个全局过滤器配置复制CHANGE REPLICATION FILTER声明

    • STARTUP_OPTIONS通过使用一个全局过滤器配置复制-复制…选项

  • ACTIVE_SINCE

    时间戳,当复制过滤器配置。

25.11.11.8的replication_applier_filters表

此表显示了复制通道特定的过滤器配置在这个奴隶。每一行提供了一个复制通道的配置滤波器的类型信息。这个replication_applier_filters表具有以下列:

  • CHANNEL_NAME

    与复制筛选器配置复制通道的名称。

  • FILTER_NAME

    复制的过滤器,已为这个复制的通道类型。

  • FILTER_RULE

    规则配置为使用复制型滤波器--replicate-*命令选项或CHANGE REPLICATION FILTER

  • CONFIGURED_BY

    该方法用于配置复制器,可以是一个:

    • CHANGE_REPLICATION_FILTER通过使用一个全局过滤器配置复制CHANGE REPLICATION FILTER声明

    • STARTUP_OPTIONS通过使用一个全局过滤器配置复制-复制…选项

    • CHANGE_REPLICATION_FILTER_FOR_CHANNEL通过特定渠道复制过滤器使用配置信道变化复制筛选声明

    • STARTUP_OPTIONS_FOR_CHANNEL通过特定渠道复制过滤器使用配置-复制…选项

  • ACTIVE_SINCE

    时间戳,当复制过滤器配置。

  • COUNTER

    时代的复制筛选后已经配置的使用数量。

25.11.11.9的replication_group_members表

此表显示网络状态复制组成员信息。网络地址用于连接客户的组地址,不应与构件的内部组通信地址指定的困惑group_replication_local_address

这个replication_group_members表具有以下列:

  • CHANNEL_NAME

    本集团的复制通道名称。

  • MEMBER_ID

    此成员标识符;作为服务器UUID相同。

  • MEMBER_HOST

    这个成员的网络地址(主机名或IP地址)。从构件的检索hostname变量

  • MEMBER_PORT

    端口,服务器监听。从构件的检索port变量

  • MEMBER_STATE

    这个成员的当前状态;可以是以下的任何一个:

    • OFFLINE:安装组复制插件,但尚未开始。

    • RECOVERING:服务器已加入了一批从它检索数据。

    • ONLINE:成员在一个全功能的状态。

  • MEMBER_ROLE

    该小组成员的作用,无论是PRIMARY

  • MEMBER_VERSION

    MySQL版本的成员。

这个replication_group_members这些指标表:

TRUNCATE TABLE是不允许的replication_group_members

25.11.11.10的replication_group_member_stats表

此表显示复制组成员统计信息。

这个replication_group_member_stats表具有以下列:

  • CHANNEL_NAME

    本集团的复制通道名称

  • VIEW_ID

    这组标识符为当前视图。

  • MEMBER_ID

    此成员标识符;同服务器的UUID。

  • COUNT_TRANSACTIONS_IN_QUEUE

    交易有待认证号码

  • COUNT_TRANSACTIONS_CHECKED

    已经注册的会员交易数量。

  • COUNT_CONFLICTS_DETECTED

    交易数量呈负认证

  • COUNT_TRANSACTIONS_VALIDATING

    有哪一个能与他们执行认证交易数量,但没有垃圾收集。

  • TRANSACTIONS_COMMITTED_ALL_MEMBERS

    建立稳定的交易

  • LAST_CONFLICT_FREE_TRANSACTION

    最新的交易认证的无冲突。

  • COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE

    一些等待交易成员的组。

  • COUNT_TRANSACTIONS_REMOTE_APPLIED

    交易数量这个成员已经从组和应用。

  • COUNT_TRANSACTIONS_LOCAL_PROPOSED

    交易数量这个成员的起源和发送到组。

  • COUNT_TRANSACTIONS_LOCAL_ROLLBACK

    交易数量这个成员是被组回滚。

这个replication_group_member_stats这些指标表:

TRUNCATE TABLE是不允许的replication_group_member_stats

25.11.12性能模式锁定表

性能模式暴露出锁的信息通过这些表:

下面的章节详细描述这些表。

25.11.12.1的data_locks表

这个data_locks表中显示的数据锁定,并要求。有关锁定请求被持有的锁,看到第25.11.12.2,“data_lock_waits表”

示例数据锁定信息:

mysql> SELECT * FROM data_locks\G
*************************** 1. row ***************************
               ENGINE: INNODB
       ENGINE_LOCK_ID: 4140:74
ENGINE_TRANSACTION_ID: 4140
            THREAD_ID: 37
             EVENT_ID: 9
        OBJECT_SCHEMA: test
          OBJECT_NAME: t1
       PARTITION_NAME: NULL
    SUBPARTITION_NAME: NULL
           INDEX_NAME: NULL
OBJECT_INSTANCE_BEGIN: 140489308280888
            LOCK_TYPE: TABLE
            LOCK_MODE: IX
          LOCK_STATUS: GRANTED
            LOCK_DATA: NULL
*************************** 2. row ***************************
               ENGINE: INNODB
       ENGINE_LOCK_ID: 4140:66:5:1
ENGINE_TRANSACTION_ID: 4140
            THREAD_ID: 37
             EVENT_ID: 9
        OBJECT_SCHEMA: test
          OBJECT_NAME: t1
       PARTITION_NAME: NULL
    SUBPARTITION_NAME: NULL
           INDEX_NAME: GEN_CLUST_INDEX
OBJECT_INSTANCE_BEGIN: 140489320307736
            LOCK_TYPE: RECORD
            LOCK_MODE: X
          LOCK_STATUS: GRANTED
            LOCK_DATA: supremum pseudo-record

不像大多数的性能架构的数据采集,没有仪器控制数据是否锁的信息收集或系统变量用于控制数据锁表的大小。性能架构收集服务器中已有的信息,所以没有内存或CPU开销生成此信息或参数控制其收集的需要。

使用data_locks表来帮助诊断性能问题在高并发负载的时候发生的。为InnoDB,看到这个话题的讨论在第15.14.2,“InnoDB information_schema事务和锁定信息”

这个data_locks这些列的表:

  • ENGINE

    持有或存储引擎要求锁。

  • ENGINE_LOCK_ID

    锁的持有或由存储引擎请求ID。Tuples(ENGINE_LOCK_ID引擎价值是独一无二的

    锁ID格式的内部,随时变更。应用程序不应该依赖锁IDS具有特定的格式。

  • ENGINE_TRANSACTION_ID

    存储引擎内部ID请求锁的事务。

    InnoDB,以获得关于该交易的细节,加入此列的TRX _ ID列的INFORMATION_SCHEMAINNODB_TRX

  • THREAD_ID

    在拥有锁的线程的ID。获取有关线索,加入此列的THREAD_ID的性能架构列threads

  • EVENT_ID

    导致锁定的性能架构事件。Tuples(THREAD_IDevent_id)值隐式确定其他性能模式表的父事件:

    • 母等事件events_waits_xxx

    • 父级事件events_stages_xxx

    • 家长声明事件events_statements_xxx

    • 父事务事件events_transactions_xxx

    获得有关父事件,加入THREAD_IDevent_id与列名称在相应的父事件表列。

  • OBJECT_SCHEMA

    包含锁表的架构

  • OBJECT_NAME

    The name of the Locked table .

  • PARTITION_NAME

    锁定的分区的名称,如;NULL否则

  • SUBPARTITION_NAME

    锁定的子分区的名称,如;NULL否则

  • INDEX_NAME

    该锁定索引的名称,如;NULL否则

    在实践中,InnoDB总是创建一个索引(gen_clust_index),所以INDEX_NAME是非—无效的InnoDB

  • OBJECT_INSTANCE_BEGIN

    在锁的内存地址

  • LOCK_TYPE

    锁的类型

    的值是存储引擎的依赖。为InnoDB,允许值唱片一个行级锁,TABLE为表级锁

  • LOCK_MODE

    如何锁定要求

    的值是存储引擎的依赖。为InnoDB锁定模式,允许描述符SXIXGapREC_NOT_GAP插入_意图AUTO_INC谓语PRDT_PAGE,和未知。锁模式描述符可以组合使用来识别特定的锁模式。GAP表示一个间隙锁record_not_gap表示只记录锁PREDICATEprdt_page描述符表示一个空间索引锁。有关其他信息InnoDB锁模式,看第15.5.1,“InnoDB锁定”

  • LOCK_STATUS

    的锁请求的状态

    的值是存储引擎的依赖。为InnoDB,允许值授予(锁)和PENDING(锁正在等待)

  • LOCK_DATA

    与锁相关的数据,如果任何。

    的值是存储引擎的依赖。为InnoDB,价值观是锁定记录的主键值如果_型锁RECORD,否则无效的。此列包含在锁定行的主键列的值,格式为一个有效的SQL字符串(可以复制到SQL语句)。如果没有主键,LOCK_DATA是独特的InnoDB内部行编号。如果间隙锁为关键值以上指标的最大值的范围,LOCK_DATA报告上确界的伪记录。当含有锁定记录页不在缓冲池(在这种情况下,它被换出到磁盘而锁举行),InnoDB不从磁盘读取网页,避免不必要的磁盘操作。相反,_数据锁是集NULL

这个data_locks这些指标表:

  • 主键(ENGINE_LOCK_ID引擎

  • 索引ENGINE_TRANSACTION_ID引擎

  • 索引THREAD_IDevent_id

  • 索引OBJECT_SCHEMAobject_namePARTITION_NAMEsubpartition _名称

TRUNCATE TABLE是不允许的data_locks

25.11.12.2的data_lock_waits表

这个data_lock_waits表实现了多对多的关系显示数据锁请求的data_locks表被这在举行数据锁data_locks表持有的锁data_locks出现在data_lock_waits如果他们阻止了锁的请求。

这些信息能够帮助你理解数据锁的会话之间的依赖关系。表暴露不仅锁定会话或事务等,但目前持有锁的会话或者事务。

示例数据锁等信息:

mysql> SELECT * FROM data_lock_waits\G
*************************** 1. row ***************************
                          ENGINE: INNODB
       REQUESTING_ENGINE_LOCK_ID: 4141:66:5:2
REQUESTING_ENGINE_TRANSACTION_ID: 4141
            REQUESTING_THREAD_ID: 38
             REQUESTING_EVENT_ID: 11
REQUESTING_OBJECT_INSTANCE_BEGIN: 140489320441368
         BLOCKING_ENGINE_LOCK_ID: 4140:66:5:2
  BLOCKING_ENGINE_TRANSACTION_ID: 4140
              BLOCKING_THREAD_ID: 37
               BLOCKING_EVENT_ID: 9
  BLOCKING_OBJECT_INSTANCE_BEGIN: 140489320307736

不像大多数的性能架构的数据采集,没有仪器控制数据是否锁的信息收集或系统变量用于控制数据锁表的大小。性能架构收集服务器中已有的信息,所以没有内存或CPU开销生成此信息或参数控制其收集的需要。

使用data_lock_waits表来帮助诊断性能问题在高并发负载的时候发生的。为InnoDB,看到这个话题的讨论在第15.14.2,“InnoDB information_schema事务和锁定信息”

因为在列data_lock_waits表是相似的data_locks表列,这里描述的缩写。更详细的列描述,看第25.11.12.1,“data_locks表”

这个data_lock_waits这些列的表:

  • ENGINE

    请求锁的存储引擎

  • REQUESTING_ENGINE_LOCK_ID

    由存储引擎请求锁定的ID。获取有关锁,加入此列的ENGINE_LOCK_ID列的data_locks

  • REQUESTING_ENGINE_TRANSACTION_ID

    存储引擎内部ID请求锁的事务。

  • REQUESTING_THREAD_ID

    这个请求锁定的会话线程ID。

  • REQUESTING_EVENT_ID

    造成请求锁的会话锁请求的性能架构事件。

  • REQUESTING_OBJECT_INSTANCE_BEGIN

    在请求锁的内存地址

  • BLOCKING_ENGINE_LOCK_ID

    的阻塞锁的ID。获取有关锁,加入此列的ENGINE_LOCK_ID列的data_locks

  • BLOCKING_ENGINE_TRANSACTION_ID

    存储引擎内部ID认为阻塞锁的事务。

  • BLOCKING_THREAD_ID

    这个把阻塞锁的会话线程ID。

  • BLOCKING_EVENT_ID

    造成阻塞锁在保存会话的性能架构事件。

  • BLOCKING_OBJECT_INSTANCE_BEGIN

    在阻塞锁内存地址

这个data_lock_waits这些指标表:

  • 索引REQUESTING_ENGINE_LOCK_ID引擎

  • 索引BLOCKING_ENGINE_LOCK_ID引擎

  • 我们(索引REQUESTING_ENGINE_TRANSACTION_ID引擎

  • 我们(索引BLOCKING_ENGINE_TRANSACTION_ID引擎

  • 索引REQUESTING_THREAD_IDrequesting_event_id

  • 索引BLOCKING_THREAD_IDblocking_event_id

TRUNCATE TABLE是不允许的data_lock_waits

25.11.12.3的metadata_locks表

性能模式暴露出元数据锁信息通过metadata_locks

  • 已授予锁(显示当前会话的元数据锁)

  • 已请求但尚未获得锁(显示会话等待元数据锁)。

  • 锁已被杀害或死锁检测器请求超时,正在等待请求的会话的锁定请求被丢弃

这些信息能够帮助你理解元数据锁之间的依赖关系的会议。你不仅可以看到锁定会话正在等待,但这届目前持有的锁。

这个metadata_locks表是只读的,不能被更新。这是autosized默认;配置表的大小,设置performance_schema_max_metadata_locks在服务器启动系统变量。

元数据锁仪表使用wait/lock/metadata/sql/mdl仪,这是默认启用

在服务器启动元数据锁固定状态控制,使用这样的诗句在你my.cnf文件:

  • 启用:

    [mysqld]
    performance-schema-instrument='wait/lock/metadata/sql/mdl=ON'
    
  • 禁用:

    [mysqld]
    performance-schema-instrument='wait/lock/metadata/sql/mdl=OFF'
    

在运行时元数据锁固定状态控制,更新setup_instruments

  • 启用:

    UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
    WHERE NAME = 'wait/lock/metadata/sql/mdl';
    
  • 禁用:

    UPDATE setup_instruments SET ENABLED = 'NO', TIMED = 'NO'
    WHERE NAME = 'wait/lock/metadata/sql/mdl';
    

性能架构保持metadata_locks表格内容如下,使用_锁定状态列显示每个锁的状态:

  • 当一个元数据锁请求立即获得,有地位的行GRANTED插入

  • 当一个元数据锁请求并没有得到立即的,有地位的行PENDING插入

  • 当一个元数据锁先前的要求是理所当然的,它的行状态更新GRANTED

  • 当一个元数据锁被释放,它的行被删除。

  • 当一个等待锁定请求被死锁检测器取消打破僵局(ER_LOCK_DEADLOCK),其行的状态更新悬而未决的VICTIM

  • 当一个悬而未决的锁请求超时(ER_LOCK_WAIT_TIMEOUT),其行的状态更新悬而未决的TIMEOUT

  • 当授予锁或挂起的锁定请求被杀,其行的状态更新GRANTED悬而未决的KILLED

  • 这个VICTIM超时,和KILLED状态值的简单意味着锁行要被删除。

  • 这个PRE_ACQUIRE_NOTIFYpost_release_notify状态值的简单意味着元数据锁定subsubsystem通知感兴趣的存储引擎在进入锁的获取或离开锁释放操作。

这个metadata_locks这些列的表:

  • OBJECT_TYPE

    类型的元数据是用来锁在锁subsystem:一个value ofGLOBAL图式TABLE功能PROCEDURE触发(未完成)EVENT承诺USER LEVEL LOCK表空间,或LOCKING SERVICE

    一个值USER LEVEL LOCK表明获得锁GET_LOCK()。一个值锁服务指示锁获得使用锁定服务描述第28.3.1,“锁定服务”

  • OBJECT_SCHEMA

    包含对象的架构

  • OBJECT_NAME

    对检测对象的名称

  • OBJECT_INSTANCE_BEGIN

    在检测对象内存地址

  • LOCK_TYPE

    从元数据锁子锁的类型。价值是一个INTENTION_EXCLUSIVE共享SHARED_HIGH_PRIOshared_readSHARED_WRITEshared_upgradableSHARED_NO_WRITEshared_no_read_write,或EXCLUSIVE

  • LOCK_DURATION

    从元数据锁子锁的持续时间。价值是一个STATEMENT交易,或EXPLICIT。这个声明TRANSACTION值意味着锁在语句或事务结束时释放,分别。这个明确的价值意味着锁生存语句或事务结束并公布明确,如全球锁收购FLUSH TABLES WITH READ LOCK

  • LOCK_STATUS

    从元数据锁子锁状态。价值是一个PENDING授予VICTIM超时KILLEDpre_acquire_notify,或POST_RELEASE_NOTIFY。性能架构指定这些值描述。

  • SOURCE

    名称的源文件包含检测代码产生的事件和文件中的行号,仪表发生。这使您可以检查源代码来确定到底是。

  • OWNER_THREAD_ID

    线程请求元数据锁

  • OWNER_EVENT_ID

    事件请求元数据锁

这个metadata_locks这些指标表:

  • 主键(OBJECT_INSTANCE_BEGIN

  • 索引OBJECT_TYPEobject_schemaOBJECT_NAME

  • 索引OWNER_THREAD_IDowner_event_id

TRUNCATE TABLE是不允许的metadata_locks

25.11.12.4的table_handles表

性能模式暴露出表锁信息通过table_handles表格显示表锁目前在每个打开的表处理的影响。table_handles介绍什么是由表锁记录仪表。这一信息显示的表处理服务器已经开放,他们是如何锁定,并通过会话。

这个table_handles表是只读的,不能被更新。这是autosized默认;配置表的大小,设置performance_schema_max_table_handles在服务器启动系统变量。

这个table_handles这些列的表:

  • OBJECT_TYPE

    由表句柄打开表

  • OBJECT_SCHEMA

    包含对象的架构

  • OBJECT_NAME

    对检测对象的名称

  • OBJECT_INSTANCE_BEGIN

    内存中的地址表处理

  • OWNER_THREAD_ID

    线程拥有表处理

  • OWNER_EVENT_ID

    造成表句柄被打开的事件。

  • INTERNAL_LOCK

    在SQL级使用表锁。价值是一个READ共享锁读READ HIGH PRIORITY阅读没有插入WRITE ALLOW WRITE编写并发插入WRITE LOW PRIORITY,或。关于这些锁的类型的信息,参见include/thr_lock.h源文件

  • EXTERNAL_LOCK

    在存储引擎层使用表锁。价值是一个READ EXTERNAL写外部

这个table_handles这些指标表:

  • 主键(OBJECT_INSTANCE_BEGIN

  • 索引OBJECT_TYPEobject_schemaOBJECT_NAME

  • 索引OWNER_THREAD_IDowner_event_id

TRUNCATE TABLE是不允许的table_handles

25.11.13性能架构系统变量表

MySQL服务器维护许多系统变量,表明它是如何配置(见第5.1.7,服务器“系统变量”)。系统变量的信息在这些性能模式表是可用的:

会话变量表(session_variablesvariables_by_thread)只包含活动会话的信息,没有终止会话。

TRUNCATE TABLE是不是性能架构系统变量表支持。

这个global_variablessession_variables这些列的表:

  • VARIABLE_NAME

    系统变量的名称

  • VARIABLE_VALUE

    在系统的变量的值。对global_variables,此列包含全球价值。为session_variables,此列包含为当前会话中的变量值的影响。

这个global_variablessession_variables这些指标表:

  • 主键(VARIABLE_NAME

这个variables_by_thread这些列的表:

  • THREAD_ID

    线程标识符的会话中,系统变量定义。

  • VARIABLE_NAME

    系统变量的名称

  • VARIABLE_VALUE

    本次会议指定的会话变量的值THREAD_ID专栏

这个variables_by_thread这些指标表:

  • 主键(THREAD_ID_ name变量

这个variables_by_thread表包含系统变量的信息只有前台线程。如果不是所有的线程都是仪表的性能架构,此表将错过一些行。在这种情况下,的Performance_schema_thread_instances_lost状态变量将大于零

25.11.13.1性能模式persisted_variables表

这个persisted_variables表提供的SQL接口mysqld-auto.cnf文件存储坚持全局系统变量的设置,使文件的内容将在运行时使用检查SELECT声明.变量是坚持使用SET PERSISTpersist_only看报表;第13.7.5.1,”句法变量赋值”。该表包含在文件的每一行坚持系统变量。变量不存在不出现在餐桌上。

关于坚持系统变量,看5.1.8节,“使用系统变量”

假设mysqld-auto.cnf看起来像这样(略修改):

{“版本”:一、“mysql_server”:{“max_connections”:{“价值”:“千”、“元数据”:{“时间戳”:1.519921706e 15,“用户”:“根”、“主机”:“localhost”} },“自动提交”:{“价值”:“上”、“元数据”:{“时间戳”:1.519921707e 15,“用户”:“根”、“主机”:“localhost”} } } }

然后persisted_variables有这些内容:

MySQL的>SELECT * FROM persisted_variables;----------------- ---------------- | variable_name | variable_value | ----------------- ---------------- |自动提交|在| | max_connections | 1000 | ----------------- ----------------

persisted_variables这些列有:

  • VARIABLE_NAME

    中列出的变量名mysqld-auto.cnf

  • VARIABLE_VALUE

    列出的值的变量mysqld-auto.cnf

persisted_variables这些指标:

  • 主键(VARIABLE_NAME

TRUNCATE TABLE是不允许的persisted_variables

25.11.13.2性能模式variables_info表

这个variables_info表格显示,每一个系统变量,源从它最近的设置,其值的范围。

variables_info这些列有:

  • VARIABLE_NAME

    变量名

  • VARIABLE_SOURCE

    从源头变最近设置:

    • COMMAND_LINE

      变量被设置在命令行

    • COMPILED

      变量的默认值编译COMPILED价值是用于变量没有设置任何其他方式。

    • DYNAMIC

      该变量在运行时设置。这包括变量设置在文件中指定使用--init-file选项

    • EXPLICIT

      变量是一个名为的选项文件--defaults-file选项

    • EXTRA

      变量是一个名为的选项文件--defaults-extra-file选项

    • GLOBAL

      变量是从全局选项文件。这包括选择文件不被EXPLICIT额外LOGIN坚持SERVER,或用户

    • LOGIN

      变量是从一个特定用户的登录路径文件(~/.mylogin.cnf

    • PERSISTED

      该变量的设置从一个服务器的特定mysqld-auto.cnf选项文件。没有行有价值如果服务器启动persisted_globals_load禁用

    • SERVER

      该变量的设置从一个服务器的特定$MYSQL_HOME/my.cnf选项文件。详情如何MySQL _家庭是集,看第4.2.6、“使用选项文件”

    • USER

      变量被设置为从一个特定用户~/.my.cnf选项文件

  • VARIABLE_PATH

    如果变量的设置从选项文件,VARIABLE_PATH是那个文件的路径名。否则,值是空字符串。

  • MIN_VALUEmax_value

    最小和最大允许值的变量。都是0,没有这样的值的变量(即,没有数值变量)。

  • SET_TIME

    时间在变最近设置。默认的时候,服务器已初始化的全局变量在系统启动。

  • SET_USERset_host

    用户名称和设置变量,最近客户端用户的主机名。如果一个客户端连接为user17从主机host34.example.com使用帐户'user17'@'%.example.comset_userSET_HOSTuser17host34.example.com,分别。代理用户连接,这些值对应于外部(代理)的用户,进行不代理用户对权限检查。每一列的默认值为空字符串,表示该变量没有设置自服务器启动。

这个variables_info这些指标表:

TRUNCATE TABLE是不允许的variables_info

如果一个变量VARIABLE_SOURCE价值比其他动态是在运行时设置,VARIABLE_SOURCE成为动态VARIABLE_PATH成为空字符串

系统变量只有一个值(如会话debug_sync)不能设置在启动或持续。会话系统变量,变量源只能COMPILED动态

如果一个系统变了意外VARIABLE_SOURCE值,考虑你的服务器启动方法。例如,_ mysqld safe读取文件并通过选择某些选项发现作为命令行的一部分,它使用开始mysqld。因此,一些系统变量设置选项文件可能会显示在variables_info作为command_line,而不是GLOBAL服务器正如你可能期望

一些示例查询使用variables_info表,与代表输出:

  • 在命令行中显示变量的设置:

    mysql> SELECT VARIABLE_NAME FROM variables_info
           WHERE VARIABLE_SOURCE = 'COMMAND_LINE'
           ORDER BY VARIABLE_NAME;
    +---------------+
    | VARIABLE_NAME |
    +---------------+
    | basedir       |
    | datadir       |
    | log_error     |
    | pid_file      |
    | plugin_dir    |
    | port          |
    +---------------+
    
  • 从持久性存储设置显示变量:

    mysql> SELECT VARIABLE_NAME FROM variables_info
           WHERE VARIABLE_SOURCE = 'PERSISTED'
           ORDER BY VARIABLE_NAME;
    +--------------------------+
    | VARIABLE_NAME            |
    +--------------------------+
    | event_scheduler          |
    | max_connections          |
    | validate_password.policy |
    +--------------------------+
    
  • 加入variables_infoglobal_variables表显示电流值持续变量及其值的范围:

    MySQL的>SELECT  VI.VARIABLE_NAME, GV.VARIABLE_VALUE,  VI.MIN_VALUE,VI.MAX_VALUEFROM variables_info AS VI  INNER JOIN global_variables AS GV  USING(VARIABLE_NAME)WHERE VI.VARIABLE_SOURCE = 'PERSISTED'ORDER BY VARIABLE_NAME;-------------------------- ----------------月亮变| _ name变量值| _ |最大值最小值| _ _ | -------------------------- ----------------月亮_ |事件调度器|我们| 0 0 | _ | |最大连接| 1 200 | | 100000 | |验证_ password.policy | 0 0强| | |月亮-------------------------- ----------------

25.11.14性能模式状态变量表

MySQL服务器维护许多状态变量提供有关运行信息(见第5.1.9,“服务器状态变量”)。状态变量的信息在这些性能模式表是可用的:

  • global_status:全局状态变量。一个应用程序,只需要全球价值应该使用此表。

  • session_status:为当前会话状态变量。一个应用程序,希望自己的会话的所有状态变量的值应该使用此表。它包括会话的会话变量,以及全局变量没有会话对应的值。

  • status_by_thread:每个活动会话的会话状态变量。一个应用程序,想知道具体的会话变量的值应该使用此表。它包括会话变量,通过线程ID标识。

也有汇总表,提供状态变量信息汇总账户,主机名和用户名。看到第25.11.15.12,状态变量汇总表”

会话变量表(session_statusstatus_by_thread)只包含活动会话的信息,没有终止会话。

性能架构收集统计全局状态变量只对线程的INSTRUMENTEDthreads表会话状态变量统计总是收集,不管的仪表价值

性能架构不收集统计Com_xxx在状态变量表状态变量。获得全球每会话语句执行计数,使用events_statements_summary_global_by_event_nameevents_statements_summary_by_thread_by_event_name表,分别。例如:

选择event_name,count_starfrom events_statements_summary_global_by_event_namewhere event_name喜欢声明/ SQL / %;

这个global_statussession_status这些列的表:

  • VARIABLE_NAME

    状态变量的名字

  • VARIABLE_VALUE

    状态变量的值。为global_status,此列包含全球价值。为session_status,此列包含为当前会话变量的值。

这个global_statussession_status这些指标表:

  • 主键(VARIABLE_NAME

这个status_by_thread表包含每个活动线程的状态。它有这些列:

  • THREAD_ID

    线程标识符的会话的状态变量定义。

  • VARIABLE_NAME

    状态变量的名字

  • VARIABLE_VALUE

    本次会议指定的会话变量的值THREAD_ID专栏

这个status_by_thread这些指标表:

  • 主键(THREAD_ID_ name变量

这个status_by_thread表包含状态变量信息只有前台线程。如果performance_schema_max_thread_instances系统变量不是自动定标的(由一个值的?1所指)和最大允许数检测线程对象不大于背景线程数,桌子是空的。

性能模式支持TRUNCATE TABLE状态变量表如下:

FLUSH STATUS将所有活动会话的会话状态的全局状态变量,重置所有活动会话的状态,并重置帐户,主机和用户状态值汇总从断开的会话。

25.11.15性能模式汇总表

汇总表提供汇总信息终止事件时间。在这组表总结事件的数据以不同的方式。

等待事件的总结

阶段总结

声明总结

交易总结

对象等的总结

文件I/O总结

表I / O和锁等待的总结

插座概述

存储器概述

错误总结

状态变量的摘要

每个汇总表已分组的列,确定如何组的数据进行汇总,汇总列包含聚合值。表格总结类似的事件常有摘要列相似集只有在分组列用来确定事件是如何聚集的不同。

Summary Tables截短can be withTRUNCATE TABLE。一般来说,效果是重置摘要列为零或无效的,不删除行。这使您能够清晰采集值并重新聚集。这可能是有用的,例如,当你已经有了一个运行时配置的改变。这是例外,截断行为个人总结部分指出表。

25.11.15.1等待事件汇总表

性能架构保持收集当前和近期的等待事件表和信息汇总表的聚集体。第25.11.4、绩效模式等事件表”介绍了该事件等总结的基础。看到讨论关于等待的事件内容信息,当前和近期的等待事件表,以及如何控制等事件的集合,它默认是禁用的。

例如等待事件的摘要信息:

mysql> SELECT * FROM events_waits_summary_global_by_event_name\G
...
*************************** 6. row ***************************
    EVENT_NAME: wait/synch/mutex/sql/BINARY_LOG::LOCK_index
    COUNT_STAR: 8
SUM_TIMER_WAIT: 2119302
MIN_TIMER_WAIT: 196092
AVG_TIMER_WAIT: 264912
MAX_TIMER_WAIT: 569421
...
*************************** 9. row ***************************
    EVENT_NAME: wait/synch/mutex/sql/hash_filo::lock
    COUNT_STAR: 69
SUM_TIMER_WAIT: 16848828
MIN_TIMER_WAIT: 0
AVG_TIMER_WAIT: 244185
MAX_TIMER_WAIT: 735345
...

每个等待事件汇总表具有一个或多个分组的列说明表的聚集事件。事件名称所指的是事件的仪器名称setup_instruments

每个等待事件汇总表的汇总列包含汇总值:

  • COUNT_STAR

    总结事件的数量。该值包括所有的事件,无论是时间或nontimed。

  • SUM_TIMER_WAIT

    在总结定时事件的总等待时间。这个值只计算定时事件因为nontimed事件有一个等待时间NULL。同样的对于其他的是真的xxx_timer_wait价值观

  • MIN_TIMER_WAIT

    在总结定时事件的最小等待时间。

  • AVG_TIMER_WAIT

    总结事件的时间平均等待时间。

  • MAX_TIMER_WAIT

    最大等待时间定时事件的总结。

等待事件有这些指标汇总表:

TRUNCATE TABLE是等待汇总表允许。有这些影响:

  • 对汇总表汇总账户,主机,或用户,截断重置摘要列为零而不是删除行。

  • 对于汇总表汇总账户,主机,或用户,截断删除行的账户,主机,或用户没有连接,并且将摘要列为零,剩余的行。

此外,每个等待汇总表,汇总账户,主机,用户,或线程是隐式的被连接的表它所依赖的截断,或截断events_waits_summary_global_by_event_name。详情见第25.11.8,绩效模式连接表”

25.11.15.2阶段汇总表

性能架构保持收集当前和近期阶段事件表和信息汇总表的聚集体。第25.11.5,“表现图式阶段事件表”描述事件这一阶段总结的基础。看到讨论关于舞台活动内容信息,当前和近期阶段事件表,以及如何控制阶段事件收集,这是默认情况下禁用。

例如阶段事件汇总信息:

mysql> SELECT * FROM events_stages_summary_global_by_event_name\G
...
*************************** 5. row ***************************
    EVENT_NAME: stage/sql/checking permissions
    COUNT_STAR: 57
SUM_TIMER_WAIT: 26501888880
MIN_TIMER_WAIT: 7317456
AVG_TIMER_WAIT: 464945295
MAX_TIMER_WAIT: 12858936792
...
*************************** 9. row ***************************
    EVENT_NAME: stage/sql/closing tables
    COUNT_STAR: 37
SUM_TIMER_WAIT: 662606568
MIN_TIMER_WAIT: 1593864
AVG_TIMER_WAIT: 17907891
MAX_TIMER_WAIT: 437977248
...

每个阶段都有一个或多个分组汇总表列说明表的聚集事件。事件名称所指的是事件的仪器名称setup_instruments

每个阶段的总结表有这些摘要列含有聚合的值:COUNT_STAR_小时_笔等MIN_TIMER_WAITavg_timer_wait,和MAX_TIMER_WAIT。这些列是类似于在等待事件汇总表相同的名称的列(见第25.11.15.1,“等待事件汇总表”),除了舞台聚集事件汇总表events_stages_current而不是events_waits_current

舞台上有这些指标汇总表:

TRUNCATE TABLE是允许阶段汇总表。有这些影响:

  • 对汇总表汇总账户,主机,或用户,截断重置摘要列为零而不是删除行。

  • 对于汇总表汇总账户,主机,或用户,截断删除行的账户,主机,或用户没有连接,并且将摘要列为零,剩余的行。

此外,每个阶段汇总表,汇总账户,主机,用户,或线程是隐式的被连接的表它所依赖的截断,或截断events_stages_summary_global_by_event_name。详情见第25.11.8,绩效模式连接表”

25.11.15.3报表汇总表

性能架构保持收集当前和近期的声明事件表和信息汇总表的聚集体。第25.11.6,绩效模式声明事件表”描述事件的陈述总结的基础。看到讨论有关声明事件的内容信息,当前和近期的声明事件表,以及如何控制语句事件收集,这是默认情况下部分残疾。

示例声明事件汇总信息:

mysql> SELECT * FROM events_statements_summary_global_by_event_name\G
*************************** 1. row ***************************
                 EVENT_NAME: statement/sql/select
                 COUNT_STAR: 25
             SUM_TIMER_WAIT: 1535983999000
             MIN_TIMER_WAIT: 209823000
             AVG_TIMER_WAIT: 61439359000
             MAX_TIMER_WAIT: 1363397650000
              SUM_LOCK_TIME: 20186000000
                 SUM_ERRORS: 0
               SUM_WARNINGS: 0
          SUM_ROWS_AFFECTED: 0
              SUM_ROWS_SENT: 388
          SUM_ROWS_EXAMINED: 370
SUM_CREATED_TMP_DISK_TABLES: 0
     SUM_CREATED_TMP_TABLES: 0
       SUM_SELECT_FULL_JOIN: 0
 SUM_SELECT_FULL_RANGE_JOIN: 0
           SUM_SELECT_RANGE: 0
     SUM_SELECT_RANGE_CHECK: 0
            SUM_SELECT_SCAN: 6
      SUM_SORT_MERGE_PASSES: 0
             SUM_SORT_RANGE: 0
              SUM_SORT_ROWS: 0
              SUM_SORT_SCAN: 0
          SUM_NO_INDEX_USED: 6
     SUM_NO_GOOD_INDEX_USED: 0
...

每个报表汇总表具有一个或多个分组的列说明表的聚集事件。事件名称所指的是事件的仪器名称setup_instruments

每个报表汇总表的汇总列含有聚合值(与例外情况说明):

这个events_statements_summary_by_digest这些额外的摘要列表:

  • FIRST_SEENlast_seen

    时间戳指示当与给定的摘要值报表是第一次看到,最近看到。

  • QUANTILE_95:声明的延迟第九十五分,在皮秒。这是一个很高的百分位数估计,从直方图数据计算。换句话说,对于一个给定的消化,95的报表有一个延迟低于测量_ 95分位数

    访问直方图数据,使用描述表第25.11.15.4,”声明直方图汇总表”

  • QUANTILE_99类似于:_ 95分位数99th,but for the百分位数。

  • QUANTILE_999类似于:_ 95分位数99.9th,but for the百分位数。

这个events_statements_summary_by_digest表包含以下列。这些既不是分组和汇总列;他们支持语句采样:

  • QUERY_SAMPLE_TEXT

    一个示例SQL语句行中产生的摘要值。本栏目允许应用程序访问,对于一个给定的摘要值,一个声明,产生消化服务器实际上看到。这一个应用可能是运行EXPLAIN在声明中对一个频繁出现的消化相关的代表性语句的执行计划。

    QUERY_SAMPLE_TEXT为列分配一个值,该query_sample_seenQUERY_SAMPLE_TIMER_WAIT列指定值以及

    可供报表显示空间最大是1024字节默认。要更改此值,设置performance_schema_max_sql_text_length在服务器启动系统变量。(改变这个值会影响其他性能模式表列为好。看到25.9节,“性能架构声明消化和采样”。)

    关于声明的采样信息,看25.9节,“性能架构声明消化和采样”

  • QUERY_SAMPLE_SEEN

    时间戳指示在声明中QUERY_SAMPLE_TEXT视柱

  • QUERY_SAMPLE_TIMER_WAIT

    在样品表的等待时间QUERY_SAMPLE_TEXT专栏

这个events_statements_summary_by_program这些额外的摘要列表:

  • COUNT_STATEMENTSsum_statements_waitMIN_STATEMENTS_WAITavg_statements_waitMAX_STATEMENTS_WAIT

    关于嵌套调用存储程序执行统计报表中。

这个prepared_statements_instances这些额外的摘要列表:

  • COUNT_EXECUTEsum_timer_executeMIN_TIMER_EXECUTEavg_timer_executeMAX_TIMER_EXECUTE

    统计汇总的事先准备好的声明的执行。

声明这些指标汇总表:

TRUNCATE TABLE是允许声明汇总表。有这些影响:

  • events_statements_summary_by_digest,它消除了行

  • 其他汇总表汇总账户,主机,或用户,截断重置摘要列为零而不是删除行。

  • 其他汇总表汇总账户,主机,或用户,截断删除行的账户,主机,或用户没有连接,并且将摘要列为零,剩余的行。

此外,每个语句汇总表,汇总账户,主机,用户,或线程是隐式的被连接的表它所依赖的截断,或截断events_statements_summary_global_by_event_name。详情见第25.11.8,绩效模式连接表”

此外,截断events_statements_summary_by_digestimplicitly截断events_statements_histogram_by_digest和truncatingevents_statements_summary_global_by_event_nameimplicitly截断events_statements_histogram_global

声明摘要聚合规则

如果statements_digest消费者被启用,聚集到events_statements_summary_by_digest出现如下语句完成时。聚集是基于文摘值计算的声明

  • 如果一个events_statements_summary_by_digest与消化价值的声明,只是完成了行已经存在的报表统计汇总,排。这个last_seen列更新为当前时间

  • 如果没有行的摘要值的语句,刚刚完成,并表是不充分的,一个新的行为表创建。这个FIRST_SEENlast_seen柱与当前时间初始化

  • 如果没有行的声明的摘要值的声明,只是完成了,并且表,统计报表,刚刚被添加到一个特殊的抓住所有DIGEST=无效的如果有必要,这是创造。如果行创建的FIRST_SEENlast_seen柱与当前时间初始化。否则,该LAST_SEEN柱与当前时间更新

与行DIGEST=无效的保持因为绩效模式表有一个最大大小由于内存限制。这个DIGEST=无效的行证消化不能即使汇总表全算其他行匹配,使用一个共同的其他斗。这一行可以帮助你判断消化总结具有代表性:

  • DIGEST=无效的行了COUNT_STAR值,代表所有消化% 5显示摘要汇总表是很有代表性;其他行覆盖95的声明。

  • DIGEST=无效的行了COUNT_STAR值,表示50%的所有消化表明摘要汇总表是不是非常具有代表性;其他行盖只有一半的声明。最有可能的DBA应该增加最大的表的大小,更多的数行文摘=NULL排将用更具体的列而不是数。为此,设置performance_schema_digests_size系统变量较大的值在服务器启动。默认大小为200。

存储程序仪表行为

用于存储程序类型的仪器是启用的setup_objects表,events_statements_summary_by_program保持存储的程序统计如下:

  • 一行添加一个对象时,它是第一个用于服务器。

  • 一个对象的行被删除对象时下降。

  • 统计汇总的行为对象在执行。

参见第25.4.3,”事件的预过滤”

25.11.15.4声明直方图汇总表

性能架构保持语句事件汇总表包含的最小,最大和平均延迟信息,声明(见第25.11.15.3,“报表汇总表”)。那些表允许高层次的评价系统的性能。允许评估在一个更细粒度的水平,性能架构也收集直方图数据声明延迟。这些直方图提供额外的洞察潜在分布。

第25.11.6,绩效模式声明事件表”描述事件的陈述总结的基础。看到讨论有关声明事件的内容信息,当前和近期的声明事件表,以及如何控制语句事件收集,这是默认情况下部分残疾。

示例语句直方图信息:

mysql> SELECT * FROM events_statements_histogram_by_digest
       WHERE SCHEMA_NAME = 'mydb' AND DIGEST = 'bb3f69453119b2d7b3ae40673a9d4c7c'
       AND COUNT_BUCKET > 0 ORDER BY BUCKET_NUMBER\G
*************************** 1. row ***************************
           SCHEMA_NAME: mydb
                DIGEST: bb3f69453119b2d7b3ae40673a9d4c7c
         BUCKET_NUMBER: 42
      BUCKET_TIMER_LOW: 66069344
     BUCKET_TIMER_HIGH: 69183097
          COUNT_BUCKET: 1
COUNT_BUCKET_AND_LOWER: 1
       BUCKET_QUANTILE: 0.058824
*************************** 2. row ***************************
           SCHEMA_NAME: mydb
                DIGEST: bb3f69453119b2d7b3ae40673a9d4c7c
         BUCKET_NUMBER: 43
      BUCKET_TIMER_LOW: 69183097
     BUCKET_TIMER_HIGH: 72443596
          COUNT_BUCKET: 1
COUNT_BUCKET_AND_LOWER: 2
       BUCKET_QUANTILE: 0.117647
*************************** 3. row ***************************
           SCHEMA_NAME: mydb
                DIGEST: bb3f69453119b2d7b3ae40673a9d4c7c
         BUCKET_NUMBER: 44
      BUCKET_TIMER_LOW: 72443596
     BUCKET_TIMER_HIGH: 75857757
          COUNT_BUCKET: 2
COUNT_BUCKET_AND_LOWER: 4
       BUCKET_QUANTILE: 0.235294
*************************** 4. row ***************************
           SCHEMA_NAME: mydb
                DIGEST: bb3f69453119b2d7b3ae40673a9d4c7c
         BUCKET_NUMBER: 45
      BUCKET_TIMER_LOW: 75857757
     BUCKET_TIMER_HIGH: 79432823
          COUNT_BUCKET: 6
COUNT_BUCKET_AND_LOWER: 10
       BUCKET_QUANTILE: 0.625000
...

例如,在3排,这些值表明23.52的查询运行在75.86微秒:

BUCKET_TIMER_HIGH: 75857757
  BUCKET_QUANTILE: 0.235294

在4排,这些值表明62.50%的查询运行在79.44微秒:

BUCKET_TIMER_HIGH: 79432823
  BUCKET_QUANTILE: 0.625000

每个语句直方图汇总表具有一个或多个分组的列说明表的聚集事件:

直方图由N桶,其中每一行代表一个桶,用桶数表示的bucket_number专栏水斗数从0

每个语句直方图汇总表有这些摘要列包含汇总的值:

  • BUCKET_TIMER_LOWbucket_timer_high

    一桶数语句有延迟,在皮秒量级,测量之间BUCKET_TIMER_LOWbucket_timer_high

    • 价值BUCKET_TIMER_LOW对于第一个bucket(bucket_number= 0) is 0.

    • 价值BUCKET_TIMER_LOW一桶(bucket_number=k)是一样的bucket_timer_high为前一桶(BUCKET_NUMBER=k?1)

    • 最后斗是一个有一个延迟直方图超出此前水桶报表包罗万象。

  • COUNT_BUCKET

    用延迟间隔测量语句数BUCKET_TIMER_LOW直到但不包括bucket_timer_high

  • COUNT_BUCKET_AND_LOWER

    测量在间隔的潜伏期从0到但不包括报表的数量BUCKET_TIMER_HIGH

  • BUCKET_QUANTILE

    报表,落入或下斗的比例。这一比例对应的定义COUNT_BUCKET_AND_LOWER / SUM(COUNT_BUCKET)和显示为一个方便的柱。

声明直方图这些指标汇总表:

TRUNCATE TABLE是声明允许直方图汇总表。截集count_bucketCOUNT_BUCKET_AND_LOWER列0

此外,截断events_statements_summary_by_digestimplicitly截断events_statements_histogram_by_digest和truncatingevents_statements_summary_global_by_event_nameimplicitly截断events_statements_histogram_global

25.11.15.5交易汇总表

性能架构保持收集当前和近期的交易事件表和信息汇总表的聚集体。第25.11.7,绩效模式交易表”描述事件的交易总结的基础。看到讨论有关交易活动的内容信息,当前和近期的交易事件表,以及如何控制交易事件收集,这是默认情况下禁用。

例如交易事件汇总信息:

mysql> SELECT * FROM events_transactions_summary_global_by_event_name LIMIT 1\G
*************************** 1. row ***************************
          EVENT_NAME: transaction
          COUNT_STAR: 5
      SUM_TIMER_WAIT: 19550092000
      MIN_TIMER_WAIT: 2954148000
      AVG_TIMER_WAIT: 3910018000
      MAX_TIMER_WAIT: 5486275000
    COUNT_READ_WRITE: 5
SUM_TIMER_READ_WRITE: 19550092000
MIN_TIMER_READ_WRITE: 2954148000
AVG_TIMER_READ_WRITE: 3910018000
MAX_TIMER_READ_WRITE: 5486275000
     COUNT_READ_ONLY: 0
 SUM_TIMER_READ_ONLY: 0
 MIN_TIMER_READ_ONLY: 0
 AVG_TIMER_READ_ONLY: 0
 MAX_TIMER_READ_ONLY: 0

每个交易汇总表具有一个或多个分组的列说明表的聚集事件。事件名称所指的是事件的仪器名称setup_instruments

每个交易汇总表的汇总列含有聚合的值:

  • COUNT_STAR_小时_笔等MIN_TIMER_WAITavg_timer_waitMAX_TIMER_WAIT

    这些列是类似于在等待事件汇总表相同的名称的列(见第25.11.15.1,“等待事件汇总表”),除了交易汇总表总事件events_transactions_current而不是events_waits_current。这些列总结读写和只读事务。

  • COUNT_READ_WRITEsum_timer_read_writeMIN_TIMER_READ_WRITEavg_timer_read_writeMAX_TIMER_READ_WRITE

    这些都是类似的COUNT_STARxxx_timer_wait列,但读写交易总结

  • COUNT_READ_ONLYsum_timer_read_onlyMIN_TIMER_READ_ONLYavg_timer_read_onlyMAX_TIMER_READ_ONLY

    这些都是类似的COUNT_STARxxx_timer_wait列,但总结只读事务的唯一。

交易这些指标汇总表:

TRUNCATE TABLE是允许交易汇总表。有这些影响:

  • 对汇总表汇总账户,主机,或用户,截断重置摘要列为零而不是删除行。

  • 对于汇总表汇总账户,主机,或用户,截断删除行的账户,主机,或用户没有连接,并且将摘要列为零,剩余的行。

此外,每个交易汇总表,汇总账户,主机,用户,或线程是隐式的被连接的表它所依赖的截断,或截断events_transactions_summary_global_by_event_name。详情见第25.11.8,绩效模式连接表”

交易聚合规则

收集事件发生时没有考虑事务的隔离级别,访问模式,或自动提交模式。

读写交易一般是资源密集型的比只读事务,因此交易汇总表包括读写和只读事务分离聚合列。

资源需求也可能与不同的事务隔离级别。然而,假定只有一个隔离级别将用于每个服务器,不提供的隔离级别聚集。

25.11.15.6对象等汇总表

性能架构保持objects_summary_global_by_type集合对象的等待事件表。

实例对象等待事件的摘要信息:

mysql> SELECT * FROM objects_summary_global_by_type\G
...
*************************** 3. row ***************************
   OBJECT_TYPE: TABLE
 OBJECT_SCHEMA: test
   OBJECT_NAME: t
    COUNT_STAR: 3
SUM_TIMER_WAIT: 263126976
MIN_TIMER_WAIT: 1522272
AVG_TIMER_WAIT: 87708678
MAX_TIMER_WAIT: 258428280
...
*************************** 10. row ***************************
   OBJECT_TYPE: TABLE
 OBJECT_SCHEMA: mysql
   OBJECT_NAME: user
    COUNT_STAR: 14
SUM_TIMER_WAIT: 365567592
MIN_TIMER_WAIT: 1141704
AVG_TIMER_WAIT: 26111769
MAX_TIMER_WAIT: 334783032
...

这个objects_summary_global_by_type这些分组列表说明表的聚集事件:object_typeOBJECT_SCHEMA,和object_name。每一行对给定对象的事件。

objects_summary_global_by_type具有相同的摘要列为events_waits_summary_by_xxx表看到第25.11.15.1,“等待事件汇总表”

这个objects_summary_global_by_type这些指标表:

  • 主键(OBJECT_TYPEobject_schemaOBJECT_NAME

TRUNCATE TABLE是允许对象汇总表。它重置摘要列为零而不是删除行。

25.11.15.7文件I/O汇总表

性能架构保持文件I/O汇总表,汇总信息的I/O操作。

示例文件I/O事件的摘要信息:

mysql> SELECT * FROM file_summary_by_event_name\G
...
*************************** 2. row ***************************
               EVENT_NAME: wait/io/file/sql/binlog
               COUNT_STAR: 31
           SUM_TIMER_WAIT: 8243784888
           MIN_TIMER_WAIT: 0
           AVG_TIMER_WAIT: 265928484
           MAX_TIMER_WAIT: 6490658832
...
mysql> SELECT * FROM file_summary_by_instance\G
...
*************************** 2. row ***************************
                FILE_NAME: /var/mysql/share/english/errmsg.sys
               EVENT_NAME: wait/io/file/sql/ERRMSG
               EVENT_NAME: wait/io/file/sql/ERRMSG
    OBJECT_INSTANCE_BEGIN: 4686193384
               COUNT_STAR: 5
           SUM_TIMER_WAIT: 13990154448
           MIN_TIMER_WAIT: 26349624
           AVG_TIMER_WAIT: 2798030607
           MAX_TIMER_WAIT: 8150662536
...

每个文件I/O汇总表具有一个或多个分组的列说明表的聚集事件。事件名称所指的是事件的仪器名称setup_instruments

  • file_summary_by_event_name有一个事件_ name专栏每一行总结了一个特定的事件,事件的名称。

  • file_summary_by_instancefile_nameEVENT_NAME,和object_instance_begin专栏每一行总结事件对于一个给定的文件和事件的名称。

每个文件I/O汇总表具有以下摘要列含有聚合值。一些列更一般、有作为的更细粒度的列的值相同的值。这样,在更高层次上聚合可直接自定义视图和下层柱的需要。

  • COUNT_STAR_小时_笔等MIN_TIMER_WAITavg_timer_waitMAX_TIMER_WAIT

    这些列集合所有的I/O操作。

  • COUNT_READsum_timer_readMIN_TIMER_READavg_timer_readMAX_TIMER_READsum_number_of_bytes_read

    这些列集合所有的读操作,包括FGETS指针FREAD,和阅读

  • COUNT_WRITEsum_timer_writeMIN_TIMER_WRITEavg_timer_writeMAX_TIMER_WRITEsum_number_of_bytes_write

    这些列集合所有的写操作,包括FPUTSfgetcFPRINTFFWRITE,和pwrite

  • COUNT_MISCsum_timer_miscMIN_TIMER_MISCavg_timer_miscMAX_TIMER_MISC

    这些列集合所有其他I/O操作,包括CREATE删除OPEN关闭STREAM_OPENstream_closeSEEK告诉FLUSH斯达FSTATchsizeRENAME,和同步。没有这些操作的字节数。

文件I/O这些指标汇总表:

TRUNCATE TABLE是文件I/O汇总表允许。它重置摘要列为零而不是删除行。

MySQL服务器使用多种技术来缓存信息读取文件避免I/O操作,所以这是可能的,陈述你可能期望导致I/O事件不会。你可以确保I/O并刷新缓存或重新启动服务器重置其状态发生。

25.11.15.8表I / O和锁等待汇总表

以下各节描述的表I / O和锁等待汇总表:

25.11.15.8.1的table_io_waits_summary_by_table表

这个table_io_waits_summary_by_table表总量表的所有I/O等待事件,所产生的等待IO / / / / SQL表处理程序仪器分组表

这个table_io_waits_summary_by_table这些分组列表说明表的聚集事件:object_typeOBJECT_SCHEMA,和object_name。这些列具有相同的含义,如在events_waits_current表他们确定的表的行的应用。

table_io_waits_summary_by_table有以下摘要列含有聚合值。在列的描述表明,一些列的更一般的和有作为的更细粒度的列的值相同的值。例如,总都写着总的插入,更新相应的列和列,并删除。这样,在更高层次上聚合可直接自定义视图和下层柱的需要。

  • COUNT_STAR_小时_笔等MIN_TIMER_WAITavg_timer_waitMAX_TIMER_WAIT

    这些列集合所有的I/O操作。他们是作为相应的金额相同xxx_READxxx_write专栏

  • COUNT_READsum_timer_readMIN_TIMER_READavg_timer_readMAX_TIMER_READ

    这些列集合所有的读操作。他们是作为相应的金额相同xxx_FETCH专栏

  • COUNT_WRITEsum_timer_writeMIN_TIMER_WRITEavg_timer_writeMAX_TIMER_WRITE

    这些列集合所有的写操作。他们是作为相应的金额相同xxx_INSERTxxx_update,和xxx_delete专栏

  • COUNT_FETCHsum_timer_fetchMIN_TIMER_FETCHavg_timer_fetchMAX_TIMER_FETCH

    这些列集合所有读取操作。

  • COUNT_INSERTsum_timer_insertMIN_TIMER_INSERTavg_timer_insertMAX_TIMER_INSERT

    这些列集合所有的插入操作。

  • COUNT_UPDATESumónónónónónónón en updateMIN_TIMER_UPDATEavg_timer_updateMAX_TIMER_UPDATE

    这些列集合所有的更新操作。

  • COUNT_DELETEsum_timer_deleteMIN_TIMER_DELETEavg_timer_deleteMAX_TIMER_DELETE

    这些列集合所有的删除操作。

这个table_io_waits_summary_by_table这些指标表:

  • 我们唯一索引(OBJECT_TYPEobject_schemaOBJECT_NAME

TRUNCATE TABLE是为表I / O汇总表允许。它重置摘要列为零而不是删除行。该表还截断截断table_io_waits_summary_by_index_usage

25.11.15.8.2的table_io_waits_summary_by_index_usage表

这个table_io_waits_summary_by_index_usage表的聚集索引表的所有I/O等待事件,所产生的等待IO / / / / SQL表处理程序仪器分组是由表索引

table_io_waits_summary_by_index_usage几乎是相同的table_io_waits_summary_by_table。唯一的区别是附加组列,索引,其对应的名称的索引时使用的表的I/O等待事件记录:

  • 一个值PRIMARY表明表I/O使用的主要指标。

  • 一个值NULL意味着表I / O没有使用索引。

  • 插入算INDEX_NAME = NULL

这个table_io_waits_summary_by_index_usage这些指标表:

  • 我们唯一索引(OBJECT_TYPEobject_schemaOBJECT_NAME索引

TRUNCATE TABLE是为表I / O汇总表允许。它重置摘要列为零而不是删除行。这张桌子也被截断的截断table_io_waits_summary_by_table表DDL操作来改变一个表的索引结构可以使每个索引统计被重置。

25.11.15.8.3的table_lock_waits_summary_by_table表

这个table_lock_waits_summary_by_table表的聚集所有的表锁等待的事件,所产生的开/锁/表/查询/处理程序仪器。这是一个桌子

该表包含有关内部和外部的锁的信息:

  • 内部锁对应的SQL层锁。这是目前实现被调用thr_lock()。在事件的行,这些锁的区别的运营柱,具有下列值之一:

    read normal
    read with shared locks
    read high priority
    read no insert
    write allow write
    write concurrent insert
    write delayed
    write low priority
    write normal
    
  • 外部锁对应的存储引擎层锁。这是目前实现被调用handler::external_lock()。在事件的行,这些锁的区别的运营柱,具有下列值之一:

    read external
    write external
    

这个table_lock_waits_summary_by_table这些分组列表说明表的聚集事件:object_typeOBJECT_SCHEMA,和object_name。这些列具有相同的含义,如在events_waits_current表他们确定的表的行的应用。

table_lock_waits_summary_by_table有以下摘要列含有聚合值。在列的描述表明,一些列的更一般的和有作为的更细粒度的列的值相同的值。例如,聚合所有锁着,总的读写锁的相应的列和列。这样,在更高层次上聚合可直接自定义视图和下层柱的需要。

  • COUNT_STAR_小时_笔等MIN_TIMER_WAITavg_timer_waitMAX_TIMER_WAIT

    这些列集合所有的锁定操作。他们是作为相应的金额相同xxx_READxxx_write专栏

  • COUNT_READsum_timer_readMIN_TIMER_READavg_timer_readMAX_TIMER_READ

    这些列集合所有读锁操作。他们是作为相应的金额相同xxx_READ_NORMALxxx_read_with_shared_locksxxx_read_high_priority,和xxx_read_no_insert专栏

  • COUNT_WRITEsum_timer_writeMIN_TIMER_WRITEavg_timer_writeMAX_TIMER_WRITE

    这些列集合所有写锁操作。他们是作为相应的金额相同xxx_WRITE_ALLOW_WRITExxx_write_concurrent_insertxxx_write_low_priority,和xxx_write_normal专栏

  • COUNT_READ_NORMAL(铃声)MIN_TIMER_READ_NORMAL一个多月以前评论MAX_TIMER_READ_NORMAL

    这些列骨料内部读锁

  • COUNT_READ_WITH_SHARED_LOCKSsum_timer_read_with_shared_locksMIN_TIMER_READ_WITH_SHARED_LOCKSavg_timer_read_with_shared_locksMAX_TIMER_READ_WITH_SHARED_LOCKS

    这些列骨料内部读锁

  • COUNT_READ_HIGH_PRIORITYsum_timer_read_high_priorityMIN_TIMER_READ_HIGH_PRIORITYavg_timer_read_high_priorityMAX_TIMER_READ_HIGH_PRIORITY

    这些列骨料内部读锁

  • COUNT_READ_NO_INSERTsum_timer_read_no_insertMIN_TIMER_READ_NO_INSERTavg_timer_read_no_insertMAX_TIMER_READ_NO_INSERT

    这些列骨料内部读锁

  • COUNT_READ_EXTERNALsum_timer_read_externalMIN_TIMER_READ_EXTERNALavg_timer_read_externalMAX_TIMER_READ_EXTERNAL

    这些列总外部读锁

  • COUNT_WRITE_ALLOW_WRITEsum_timer_write_allow_writeMIN_TIMER_WRITE_ALLOW_WRITEavg_timer_write_allow_writeMAX_TIMER_WRITE_ALLOW_WRITE

    这些列骨料内部写锁

  • COUNT_WRITE_CONCURRENT_INSERTsum_timer_write_concurrent_insertMIN_TIMER_WRITE_CONCURRENT_INSERTavg_timer_write_concurrent_insertMAX_TIMER_WRITE_CONCURRENT_INSERT

    这些列骨料内部写锁

  • COUNT_WRITE_LOW_PRIORITYsum_timer_write_low_priorityMIN_TIMER_WRITE_LOW_PRIORITYavg_timer_write_low_priorityMAX_TIMER_WRITE_LOW_PRIORITY

    这些列骨料内部写锁

  • COUNT_WRITE_NORMAL_小时_笔写_正常MIN_TIMER_WRITE_NORMALavg_timer_write_normalMAX_TIMER_WRITE_NORMAL

    这些列骨料内部写锁

  • COUNT_WRITE_EXTERNALsum_timer_write_externalMIN_TIMER_WRITE_EXTERNALavg_timer_write_externalMAX_TIMER_WRITE_EXTERNAL

    这些列总外部写锁

这个table_lock_waits_summary_by_table这些指标表:

  • 我们唯一索引(OBJECT_TYPEobject_schemaOBJECT_NAME

TRUNCATE TABLE是表锁允许汇总表。它重置摘要列为零而不是删除行。

25.11.15.9插座汇总表

这些插座汇总表总计时器和字节计数信息插座的操作:

插座汇总表不聚合等产生的idle事件而插座正在等待来自客户端的下一个请求。为虚度事件聚合,使用等待事件汇总表;看第25.11.15.1,“等待事件汇总表”

每个插座汇总表具有一个或多个分组的列说明表的聚集事件。事件名称所指的是事件的仪器名称setup_instruments

每个插座汇总表的汇总列包含汇总的值:

  • COUNT_STAR_小时_笔等MIN_TIMER_WAITavg_timer_waitMAX_TIMER_WAIT

    这些列集合的所有操作。

  • COUNT_READsum_timer_readMIN_TIMER_READavg_timer_readMAX_TIMER_READsum_number_of_bytes_read

    这些列集合所有接收操作(RECVrecvfrom,和RECVMSG

  • COUNT_WRITEsum_timer_writeMIN_TIMER_WRITEavg_timer_writeMAX_TIMER_WRITEsum_number_of_bytes_write

    这些列集合所有发送操作(SENDSendTo,和SENDMSG

  • COUNT_MISCsum_timer_miscMIN_TIMER_MISCavg_timer_miscMAX_TIMER_MISC

    这些列集合所有其他套接字操作,如CONNECTACCEPT关闭,和SHUTDOWN。没有这些操作的字节数。

这个socket_summary_by_instance桌子上也有一个事件_ name列指示插座类:client_connectionserver_tcpip_socketserver_unix_socket。本栏目可以分组分离,例如,从该服务器侦听套接字的客户活动。

插座有这些指标汇总表:

TRUNCATE TABLE是允许插座汇总表。除了events_statements_summary_by_digest,TT重置摘要列为零而不是删除行。

25.11.15.10记忆汇总表

性能架构仪器内存使用和骨料的内存使用统计,通过这些因素的详细:

  • 使用的内存类型(各种缓存,内部缓存,等等)

  • 螺纹,帐户,用户、主机间接执行内存操作

下面的内存使用方面的性能架构工具

  • 内存大小

  • 操作数

  • 低和高的水痕

内存大小有助于理解或调整服务器的内存消耗。

操作计数有助于理解或调整压力总体服务器上的内存分配器,这对性能的影响。分配一个字节的一百万倍是不分配一百万字节的一个单一的时间相同;跟踪大小和计数可以暴露的差异。

低和高水位标记是检测工作量峰值的关键,总体工作量的稳定,以及可能的内存泄漏。

记忆汇总表不包含时间信息,因为内存事件不定时。

关于收集内存使用情况的数据信息,看记忆仪表行为

例如记忆事件的摘要信息:

mysql> SELECT * FROM memory_summary_global_by_event_name
       WHERE EVENT_NAME = 'memory/sql/TABLE'\G
*************************** 1. row ***************************
                  EVENT_NAME: memory/sql/TABLE
                 COUNT_ALLOC: 1381
                  COUNT_FREE: 924
   SUM_NUMBER_OF_BYTES_ALLOC: 2059873
    SUM_NUMBER_OF_BYTES_FREE: 1407432
              LOW_COUNT_USED: 0
          CURRENT_COUNT_USED: 457
             HIGH_COUNT_USED: 461
    LOW_NUMBER_OF_BYTES_USED: 0
CURRENT_NUMBER_OF_BYTES_USED: 652441
   HIGH_NUMBER_OF_BYTES_USED: 669269

每个存储汇总表具有一个或多个分组的列说明表的聚集事件。事件名称所指的是事件的仪器名称setup_instruments

每个存储汇总表的汇总列包含汇总的值:

  • COUNT_ALLOCcount_free

    聚集数调用内存分配和内存释放功能。

  • SUM_NUMBER_OF_BYTES_ALLOCsum_number_of_bytes_free

    聚集的大小分配和释放内存块。

  • CURRENT_COUNT_USED

    累计目前分配尚未释放但块。这是一个方便的柱,等于COUNT_ALLOC?count_free

  • CURRENT_NUMBER_OF_BYTES_USED

    聚集体大小当前分配的内存块,没有被释放,但。这是一个方便的柱,等于SUM_NUMBER_OF_BYTES_ALLOC?sum_number_of_bytes_free

  • LOW_COUNT_USED高高档计数

    低和高水位标记对应的CURRENT_COUNT_USED专栏

  • LOW_NUMBER_OF_BYTES_USEDhigh_number_of_bytes_used

    低和高水位标记对应的CURRENT_NUMBER_OF_BYTES_USED专栏

记忆中有这些指标汇总表:

TRUNCATE TABLE是记忆汇总表允许。有这些影响:

  • 总的来说,截断重置统计基线,但不改变服务器状态。这是一个记忆,截断表不释放内存。

  • COUNT_ALLOCcount_free重置为一个新的基线,通过相同的值减少每个计数器。

  • 同样,SUM_NUMBER_OF_BYTES_ALLOCsum_number_of_bytes_free重置为一个新的基线

  • LOW_COUNT_USED高高档计数复位CURRENT_COUNT_USED

  • LOW_NUMBER_OF_BYTES_USEDhigh_number_of_bytes_used复位CURRENT_NUMBER_OF_BYTES_USED

此外,每个存储汇总表,汇总账户,主机,用户,或线程是隐式的被连接的表它所依赖的截断,或截断memory_summary_global_by_event_name。详情见第25.11.8,绩效模式连接表”

记忆仪表行为

记忆工具列在setup_instruments表格的名称表,内存code_area/instrument_name。记忆的仪器是默认启用。

仪器带有前缀命名memory/performance_schema/暴露多少内存分配给内部缓冲性能架构本身。这个内存/ performance_schema /仪器内置,始终启用,并且无法被禁用在启动或运行时。内建记忆体,仪器只显示memory_summary_global_by_event_name

控制存储在服务器启动仪器的状态,用这样的诗句在你my.cnf文件:

  • 启用:

    [mysqld]
    performance-schema-instrument='memory/%=ON'
    
  • 禁用:

    [mysqld]
    performance-schema-instrument='memory/%=OFF'
    

在运行时内存仪器状态控制,更新ENABLED对相关仪器在列setup_instruments

  • 启用:

    UPDATE setup_instruments SET ENABLED = 'YES'
    WHERE NAME LIKE 'memory/%';
    
  • 禁用:

    UPDATE setup_instruments SET ENABLED = 'NO'
    WHERE NAME LIKE 'memory/%';
    

记忆的工具,TIMEDsetup_instruments被忽略,因为内存的操作是不定时的。

笔记

如果禁用内存仪表后启用,会计可能会导致显著的不良配置丢失分配操作但计算自由操作。

当在服务器的一个线程执行一个内存分配一直使用的,这些规则的应用:

  • 如果线程不检测或存储仪器未启用,内存块分配的不测。

  • 否则(即两线和仪器是启用),内存块分配的仪表。

为释放,这些规则的应用:

  • 如果一个内存块的分配使用,自由操作仪器,并统计了。

  • 如果一个内存块分配不固定,自由操作不固定;没有统计的变化。

为每个线程的统计,适用以下规则。

当检测内存块的大小N配置、性能架构使得这些内存更新汇总表列:

  • COUNT_ALLOC:增加1

  • CURRENT_COUNT_USED:增加1

  • HIGH_COUNT_USED如:增加当前位置一种新的最大

  • SUM_NUMBER_OF_BYTES_ALLOC:增加N

  • CURRENT_NUMBER_OF_BYTES_USED:增加N

  • HIGH_NUMBER_OF_BYTES_USED如:增加current_number_of_bytes_used一种新的最大

当检测内存块被释放,性能架构使得这些内存更新汇总表列:

  • COUNT_FREE:增加1

  • CURRENT_COUNT_USED:下降1

  • LOW_COUNT_USED如:降低当前位置一个新的最小

  • SUM_NUMBER_OF_BYTES_FREE:增加N

  • CURRENT_NUMBER_OF_BYTES_USED:减少N

  • LOW_NUMBER_OF_BYTES_USED如:降低current_number_of_bytes_used一个新的最小

更高级别的聚集体(全球的客户,用户,通过主机),同样的规则适用于预期的低和高的水痕。

  • LOW_COUNT_USEDlow_number_of_bytes_used较低的估计。价值的表现图式的报道是保证是小于或等于最低计数或有效地使用在运行时的内存大小。

  • HIGH_COUNT_USEDhigh_number_of_bytes_used较高的估计。价值的表现图式报道必须保证大于或等于最高计数或有效地使用在运行时的内存大小。

在汇总表以外的下界估计memory_summary_global_by_event_name如果记忆、价值转移所有权的线程之间可以去负。

这里是估计计算的一个例子;但注意,估计实施主体变更:

线程1使用内存在从1MB 2MB期间执行的范围,报告由LOW_NUMBER_OF_BYTES_USEDhigh_number_of_bytes_used列的memory_summary_by_thread_by_event_name

线程2使用内存从10mb到12mb执行期间的范围,据报道同样。

当这两个线程属于同一个用户帐户,每个帐户汇总估计,从11mb到14 MB的范围内该帐户使用的内存。那是的LOW_NUMBER_OF_BYTES_USED为更高层次的聚合是每个的总和low_number_of_bytes_used(假设最坏的情况下)。同样,该HIGH_NUMBER_OF_BYTES_USED为更高层次的聚合是每个的总和high_number_of_bytes_used(假设最坏的情况下)。

11mb是一个较低的估计,只有两个线程打低使用标志同时出现。

14mb是较高的估计,只有两个线程打高使用标志同时出现。

这个账户的实际内存的使用已经在从11.5mb到13.5mb范围。

容量规划,最坏情况报告实际上是预期的行为,因为它有可能发生在会话之间互不相关,这是典型的案例。

25.11.15.11错误汇总表

性能架构保持聚集服务器错误信息统计汇总表(和警告)。一个列表中的服务器错误,看第三,“服务器错误代码和消息”

错误信息的收集是由error仪,这是默认启用。定时信息不收集。

每个错误汇总表有三列,标识错误:

  • ERROR_NUMBERis the error值值。茶的价值是独特的。

  • ERROR_NAME是符号错误名称对应的error_number值。是一个独特的价值。

  • SQLSTATE是的SQLSTATE值对应的error_numberValue。not necessarily the value是独一无二的。

例如,如果ERROR_NUMBER1050,error_nameER_TABLE_EXISTS_ERRORSQLSTATE42S01

实例错误事件的摘要信息:

mysql> SELECT * FROM events_errors_summary_global_by_error
       WHERE SUM_ERROR_RAISED <> 0\G
*************************** 1. row ***************************
     ERROR_NUMBER: 1064
       ERROR_NAME: ER_PARSE_ERROR
        SQL_STATE: 42000
 SUM_ERROR_RAISED: 1
SUM_ERROR_HANDLED: 0
       FIRST_SEEN: 2016-06-28 07:34:02
        LAST_SEEN: 2016-06-28 07:34:02
*************************** 2. row ***************************
     ERROR_NUMBER: 1146
       ERROR_NAME: ER_NO_SUCH_TABLE
        SQL_STATE: 42S02
 SUM_ERROR_RAISED: 2
SUM_ERROR_HANDLED: 0
       FIRST_SEEN: 2016-06-28 07:34:05
        LAST_SEEN: 2016-06-28 07:36:18
*************************** 3. row ***************************
     ERROR_NUMBER: 1317
       ERROR_NAME: ER_QUERY_INTERRUPTED
        SQL_STATE: 70100
 SUM_ERROR_RAISED: 1
SUM_ERROR_HANDLED: 0
       FIRST_SEEN: 2016-06-28 11:01:49
        LAST_SEEN: 2016-06-28 11:01:49

每个错误汇总表具有一个或多个分组的列说明表总量误差:

每个错误汇总表的汇总列包含的聚集值:

  • SUM_ERROR_RAISED

    本栏目聚集次错误发生数。

  • SUM_ERROR_HANDLED

    本栏目聚集时代错误的数量在一个SQL异常处理程序来处理。

  • FIRST_SEENlast_seen

    时间戳指示错误时是第一次看到,最近看到。

NULL排在每个错误汇总表用于所有错误,躺在仪器的误差范围汇总统计。例如,如果MySQL服务器错误在范围从MN并将引发错误的号码Q不在这个范围内,误差出现在无效的行。这个NULL行与行ERROR_NUMBER=0ERROR_NAME=NULL,和SQLSTATE=NULL

错误有这些指标汇总表:

TRUNCATE TABLE是汇总表允许误差。有这些影响:

  • 对汇总表汇总账户,主机,或用户,截断重置摘要列为零或NULL而不是删除行

  • 对于汇总表汇总账户,主机,或用户,截断删除行的账户,主机,或用户没有连接,并且将摘要列为零或NULL对于剩余的行

此外,每个错误汇总表,汇总账户,主机,用户,或线程是隐式的被连接的表它所依赖的截断,或截断events_errors_summary_global_by_error。详情见第25.11.8,绩效模式连接表”

25.11.15.12变状态汇总表

性能架构使状态变量信息表中描述第25.11.14,“性能模式状态变量表”。这也使得聚集状态变量信息汇总表,这里描述的。每一个状态变量汇总表具有一个或多个说明表的聚集状态值列分组:

  • status_by_account用户HOST,和_ name变量列的账户,总结状态变量。

  • status_by_host主机VARIABLE_NAME柱对状态变量的主机从客户端连接。

  • status_by_user用户VARIABLE_NAME列由客户端用户名总结状态变量。

每个状态变量汇总表已总结含聚合值列:

  • VARIABLE_VALUE

    聚集状态变量值的主动和终止会话。

状态变量的这些指标汇总表:

的意思账户在这些表中类似于MySQL的授权表的意义mysql系统的数据库,在这个意义上,是指结合用户和主机的价值。他们的区别在于,对于发放表,一个帐户的主机部分可以是一个模式,而绩效模式表,主值始终是一个特定的nonpattern主机名。

帐户状态时收集的会话终止。会话状态计数器添加到全局状态计数器和相应的帐户状态计数器。如果帐户统计是不收的,会话状态添加到主机和用户状态,如果收集主机和用户状态。

帐户,主机和用户数据收集不如果performance_schema_accounts_sizeperformance_schema_hosts_size,和performance_schema_users_size系统变量,分别设置为0。

性能模式支持TRUNCATE TABLE状态变量汇总表如下;在所有的情况下,主动会话状态不受影响:

  • status_by_account:骨料帐户状态从终止会话的用户和主机的状态,然后重置帐户状态。

  • status_by_host聚集:重置主机状态从终止会话。

  • status_by_user:重置聚集的用户状态从终止会话。

FLUSH STATUS将所有活动会话的会话状态的全局状态变量,重置所有活动会话的状态,并重置帐户,主机和用户状态值汇总从断开的会话。

25.11.16性能模式杂表

以下各节描述表不属于前面章节中讨论的表类:

25.11.16.1的host_cache表

这个host_cache表提供了访问的主机缓存的内容,其中包含客户端的主机名和IP地址的信息,以避免DNS查找。(见第8.12.4.2,“DNS查询优化和主机缓存”的。)host_cache表暴露主机缓存的内容可以使用了SELECT声明.绩效模式必须启用或这张桌子是空的。

这个host_cache这些列的表:

  • IP

    在客户端连接到服务器的IP地址,表示为一个字符串。

  • HOST

    解析的DNS主机名,IP,或NULL如果名字是未知的

  • HOST_VALIDATED

    无论是IP主机名到IP的DNS解析为客户端IP成功完成。如果HOST_VALIDATED,的HOST柱作为对应的IP,可以避免调用DNS主机名。而按主机_NO,DNS解析是再次尝试为每个连接尝试,直到它最终完成与一个有效的结果或一个永久性错误。此信息使服务器能够避免缓存损坏或丢失的主机名在临时DNS故障,这将影响客户永远。

  • SUM_CONNECT_ERRORS

    这被认为是连接错误数舞台调度(评估对max_connect_errors系统变量)。只有协议握手的错误进行统计,只有通过验证的主机(HOST_VALIDATED = YES

  • COUNT_HOST_BLOCKED_ERRORS

    因为,被连接的数量SUM_CONNECT_ERRORS超过此值max_connect_errors系统变量

  • COUNT_NAMEINFO_TRANSIENT_ERRORS

    一些短暂的错误在IP主机名DNS解析。

  • COUNT_NAMEINFO_PERMANENT_ERRORS

    一些永久性的错误在IP主机名DNS解析。

  • COUNT_FORMAT_ERRORS

    主机名称格式错误数。MySQL不执行匹配Host列中的值mysql.user表对其中一个或多个名称的初始成分完全数字主机名称,如1.2.example.com。客户端IP地址代替。为理由这种匹配不发生,看第6.2.4,“指定的帐户名”

  • COUNT_ADDRINFO_TRANSIENT_ERRORS

    一些短暂的错误在主机名到IP反向DNS解析。

  • COUNT_ADDRINFO_PERMANENT_ERRORS

    一些永久性的错误在主机名到IP反向DNS解析。

  • COUNT_FCRDNS_ERRORS

    数着确认反向DNS错误。这些错误出现在IP主机名到IP的DNS解析产生一个IP地址不匹配的客户端的源IP地址。

  • COUNT_HOST_ACL_ERRORS

    错误发生的数目因为没有允许用户从客户端连接。在这种情况下,服务器返回ER_HOST_NOT_PRIVILEGED甚至不要求用户名或密码。

  • COUNT_NO_AUTH_PLUGIN_ERRORS

    由于一个可用的身份验证插件请求错误数。一个插件可以没有如果,例如,它从来没有加载或加载失败。

  • COUNT_AUTH_PLUGIN_ERRORS

    通过认证的插件报告的错误数。

    验证插件可以报告不同的错误代码来表示一个失败的根本原因。根据错误的类型,其中一列是递增的:COUNT_AUTHENTICATION_ERRORSCount England Aauth Flui PluGo Plujy RomorsCOUNT_HANDSHAKE_ERRORS。新的返回码是一个可选的扩展现有的插件API。未知或意外的插件错误都算在Count England Aauth Flui PluGo Plujy Romors专栏

  • COUNT_HANDSHAKE_ERRORS

    在线路协议水平检测错误数。

  • COUNT_PROXY_USER_ERRORS

    错误的数量时,用户代理,代理检测到另一个用户B不存在的人。

  • COUNT_PROXY_USER_ACL_ERRORS

    错误的数量时,用户代理,代理检测到另一个用户B的人确实存在,但他们没有PROXY特权

  • COUNT_AUTHENTICATION_ERRORS

    失误造成认证失败次数。

  • COUNT_SSL_ERRORS

    由于SSL问题错误数。

  • COUNT_MAX_USER_CONNECTIONS_ERRORS

    以超过每用户连接数量配额引起的误差。看到第6.3.6,“设置账户资源限制”

  • COUNT_MAX_USER_CONNECTIONS_PER_HOUR_ERRORS

    用超过每小时每用户连接数量配额引起的误差。看到第6.3.6,“设置账户资源限制”

  • COUNT_DEFAULT_DATABASE_ERRORS

    在默认的数据库相关的错误数。例如,数据库不存在,或者用户没有权限访问它。

  • COUNT_INIT_CONNECT_ERRORS

    通过语句的执行故障引起的错误数init_connect系统变量价值

  • COUNT_LOCAL_ERRORS

    错误的地方到服务器的实现和网络,没有相关的认证号码,或授权。例如,内存不足的条件下就属于这一类。

  • COUNT_UNKNOWN_ERRORS

    其他的一些未知的错误,不占其他列在这张表中。本栏目保留供将来使用,如果新的错误条件必须上报,如果保持向后兼容性和表结构的host_cache表中的要求

  • FIRST_SEEN

    在第一次连接尝试在从客户端看到的时间戳IP专栏

  • LAST_SEEN

    最后的连接尝试在从客户端看到的时间戳IP专栏

  • FIRST_ERROR_SEEN

    第一个错误的时间戳从客户端在IP专栏

  • LAST_ERROR_SEEN

    最近一个错误的时间戳从客户端在IP专栏

这个host_cache这些指标表:

  • 主键(IP

  • 索引HOST

FLUSH HOSTSTRUNCATE TABLE host_cache有相同的效果:他们清除缓存。清除缓存也删除行的host_cache表(因为它是缓存的可视表示)和疏导堵塞主机(见第b.5.2.5,“主机”host_name“受阻”。)FLUSH HOSTS要求RELOAD特权TRUNCATE TABLE要求DROP特权的host_cache

25.11.16.2的performance_timers表

这个performance_timers表格显示,事件计时器是可用的:

MySQL的&#62;SELECT * FROM performance_timers;------------- ----------------- ------------------ ---------------- | timer_name | timer_frequency | timer_resolution | timer_overhead | ------------- ----------------- ------------------ ---------------- |周期| 2389029850 | 1 | 72 | |纳秒| 1000000000 | 1 | 112 | |微秒| 1000000 | 1 | 136 | |毫秒| 1036 | 1 | 168 | ------------- ----------------- ------------------ ----------------

如果值与一个给定的定时器的名字是NULL,,是不支持你的平台。对于事件时间发生的解释,看第25.4.1、绩效架构事件时间”

这个performance_timers这些列的表:

  • TIMER_NAME

    定时器的名字

  • TIMER_FREQUENCY

    每秒定时器单元数。一个周期定时器,频率一般是对CPU的速度有关。例如,在2.4GHz的处理器系统,该CYCLE可能接近2400000000。

  • TIMER_RESOLUTION

    表明单位的计时器定时器的值的数量增加。如果定时器具有10位的分辨率,它的价值增加了10,每一次。

  • TIMER_OVERHEAD

    周期的开销最小号码获取与给定的定时器定时。性能架构通过调用定时器20次初始化和采摘的最小值在确定这个值。总的开销真的是这个的两倍量因为仪器调用计时器在开始和结束每一个事件。定时器代码被称为唯一的定时事件,所以这种开销,不适用于nontimed事件。

这个performance_timers这些指标表:

TRUNCATE TABLE是不允许的performance_timers

25.11.16.3线程表

这个threads表包含每个服务器线程一排。每一行包含一个线程信息和指示监测和历史事件记录启用它:

MySQL的&#62;SELECT * FROM threads\G*************************** 1。行*************************** thread_id:1名称:螺纹/ SQL /主要类型:背景processlist_id:空processlist_user:空processlist_host:空processlist_db:nullprocesslist_command:空processlist_time:80284 processlist_state:空processlist_info:空parent_thread_id:空的作用:空仪表:是的历史:是的connection_type:空thread_os_id:489803 resource_group:sys_default *************************** 4。行*************************** thread_id:五一名称:螺纹/ SQL / one_connection类型:前景processlist_id:34 processlist_user:伊莎贝拉processlist_host:localhost processlist_db:performance_schemaprocesslist_command:查询processlist_time:0 processlist_state:发送数据processlist_info:SELECT * FROM线程parent_thread_id:1作用:空仪表:是的历史:是的connection_type:SSL / TLS thread_os_id:755399 resource_group:usr_default…

当性能模式初始化,它填充threads表基于线程的存在,然后。此后,新的一行是每次添加的服务器创建一个线程。

这个INSTRUMENTED历史新线程列值的含量测定setup_actors表有关如何使用setup_actors表格控制这些列,看第25.4.6,“预滤波线”

从脱排threads表当线程结束。一个客户端会话关联的线程,去除发生在会话结束。如果一个客户有自动重新连接启用会话重新连接断开后,会议就在新的一行相关threads表不同,processlist_id价值。在初始INSTRUMENTED历史新线程的值可能不同于那些原始的线程:setup_actors表可能已经变了,如果仪表HISTORY对于原始线程值行初始化后的改变,改变不带到新的线程。

这个threads有一个前缀的名称表列processlist _提供类似的信息,可从INFORMATION_SCHEMA.PROCESSLIST表或SHOW PROCESSLIST声明。因此,所有的三个来源提供线程监控信息。使用threads不同于使用这些方法的其他两个来源:

  • 访问threads不需要一个互斥体和对服务器性能的影响最小。INFORMATION_SCHEMA.PROCESSLISTSHOW PROCESSLIST有负面的绩效后果是因为他们需要一个互斥。

  • threads为每个线程提供了额外的信息,比如是否是前台或后台线程,并在线程关联的位置服务器。

  • threads提供有关背景线程的信息,因此它可以用来监测活动的其他线程的信息来源不。

  • 您可以启用或禁用线程监控(即是否由线程执行活动的仪器)和历史事件记录。控制初始INSTRUMENTED历史新的前台线程的值,使用setup_actors表控制这些方面现有的线程,设置仪表HISTORYthreads表中的行。(更多信息的条件下,线程监控和历史事件记录时,看到的描述仪表HISTORY列。)

由于这些原因,谁执行的服务器监控使用DBAINFORMATION_SCHEMA.PROCESSLISTSHOW PROCESSLIST不妨使用显示器threads表代替

笔记

INFORMATION_SCHEMA.PROCESSLISTSHOW PROCESSLIST,信息对其他用户线程只显示如果当前用户具有PROCESS特权。那不是真的threads表;所有的行显示任何用户谁有选择表的特权。那些不能看到其他用户线程的用户不应该被给予特权。

这个threads这些列的表:

  • THREAD_ID

    一个独特的主题

  • NAME

    在服务器的线程检测代码有关的名字。例如,thread/sql/one_connection对应的线程函数,负责处理用户连接的代码,和线/ SQL /主要代表的main()服务器的功能

  • TYPE

    螺纹式,要么FOREGROUND背景。用户连接线程是前台线程。内部服务器相关的线程是后台线程。例子是内部InnoDB螺纹,binlog转储线程发送信息到奴隶和奴隶的I / O和SQL线程。

  • PROCESSLIST_ID

    这是显示在线程INFORMATION_SCHEMA.PROCESSLIST表,这是显示在相同的值身份证件该表列。它还显示在价值IdSHOW PROCESSLIST输出,和价值CONNECTION_ID()将在该线程返回

    后台线程(线程与用户连接相关),PROCESSLIST_ID无效的的,所以是不唯一的

  • PROCESSLIST_USER

    与前台线程相关联的用户,NULL一个后台线程

  • PROCESSLIST_HOST

    与前台线程关联的客户端主机名,NULL一个后台线程

    不像HOST列的information_schemaPROCESSLIST表或主机SHOW PROCESSLIST输出的processlist_host列不包括端口号为TCP/IP连接。从绩效模式获得此信息,使插座仪表(默认情况下不启用)和检查socket_instances

    MySQL的&#62;SELECT NAME, ENABLED, TIMED FROM setup_instrumentsWHERE NAME LIKE 'wait/io/socket%';---------------------------------------- --------- ------- |名字|启用|定时| ---------------------------------------- --------- ------- |等待/ IO /插座/ SQL / server_tcpip_socket |没有|没有| |等待/ IO /插座/ SQL / server_unix_socket |没有|没有| |等待/ IO /插座/ SQL / client_connection |没有|没有| ---------------------------------------- --------- ------- 3行设定(0.01秒)MySQL &#62;UPDATE setup_instruments SET ENABLED='YES' WHERE NAME LIKE 'wait/io/socket%';查询行,3行受影响(0秒)的行匹配:3改变:3警告:0mysql &#62;SELECT * FROM socket_instances\G*************************** 1。行*************************** event_name:等待/ IO /插座/ SQL / client_connectionobject_instance_begin:140612577298432:31:53 thread_id socket_id IP::::127.0.0.1端口:55642范围:主动…
  • PROCESSLIST_DB

    该线程的默认数据库,或NULL如果没有

  • PROCESSLIST_COMMAND

    前台线程,指挥线是代表客户机执行的类型,或Sleep如果会话空闲。对于螺纹命令的说明,见第8,“检查线程的信息”。该列的值对应于COM_xxx的客户端/服务器协议的命令和com_xxx状态变量。看到第5.1.9,“服务器状态变量”

    后台线程并不代表客户执行命令,所以此栏可NULL

  • PROCESSLIST_TIME

    在几秒钟的时间,线程已在其当前状态。

  • PROCESSLIST_STATE

    一个动作、事件或状态指示线程正在做什么。用于描述PROCESSLIST_STATE值,见第8,“检查线程的信息”。如果该值如果NULL,线程可以对应于一个空闲客户会议或工作做不使用阶段。

    大多数州对应很快行动。如果一个线程保持在一个给定的数秒的状态,有可能是一个问题,需要调查。

  • PROCESSLIST_INFO

    声明线程正在执行,或NULL如果不执行任何语句。声明可能是发送到服务器,或内心的声明如果语句执行其他语句。例如,如果一个呼叫语句执行的存储过程的执行SELECT声明的processlist_info显示值SELECT声明

  • PARENT_THREAD_ID

    如果这是子线程的线程(由另一个线程产生的),这是THREAD_ID产卵的线程值

  • ROLE

    未使用的

  • INSTRUMENTED

    是否由线程执行事件检测。的价值YES

    • 前台线程,初始INSTRUMENTED价值取决于与线程相关联的用户帐户匹配任何排在setup_actors表匹配是基于价值观的processlist_userPROCESSLIST_HOST专栏

      如果线程生成一个匹配的子线程,再次发生threads表格行的子线程的创建。

    • 后台线程,INSTRUMENTED默认情况下setup_actors是不是因为没有相关的用户咨询为后台线程。

    • 任何线程,其INSTRUMENTED值可以是线程的一生中的变化。

    用线程执行发生的事件的监测,这些东西必须是真实的:

    • 这个thread_instrumentation消费者在setup_consumers表格必须

    • 这个threads.INSTRUMENTED列必须

    • 监控时只为那些线程事件产生的仪器有ENABLED栏目设置setup_instruments

  • HISTORY

    是否记录历史事件的线程。的价值YES

    • 前台线程,初始HISTORY价值取决于与线程相关联的用户帐户匹配任何排在setup_actors表匹配是基于价值观的processlist_userPROCESSLIST_HOST专栏

      如果线程生成一个匹配的子线程,再次发生threads表格行的子线程的创建。

    • 后台线程,HISTORY默认情况下setup_actors是不是因为没有相关的用户咨询为后台线程。

    • 任何线程,其HISTORY值可以是线程的一生中的变化。

    历史事件的线程发生日志,这些东西必须是真实的:

  • CONNECTION_TYPE

    该协议用于建立连接,或NULL后台线程。允许值叶子(TCP/IP建立了未加密的连接),SSL/TLS(TCP/IP建立加密连接),插座(UNIX套接字文件连接),Named Pipe(Windows命名管道连接),和共享内存(Windows共享内存连接)。

  • THREAD_OS_ID

    线程或任务的底层操作系统定义的标识符,如果有一个:

    • 当MySQL线程以其寿命相同的操作系统线程相关联的,THREAD_OS_ID包含操作系统的线程ID。

    • 当MySQL线程不是其生命周期与同一个操作系统线程相关联的,THREAD_OS_ID包含无效的。这是典型的用户会话,当线程池插件的使用(见第5.6.3,MySQL企业线程池”

    对于Windows,THREAD_OS_ID对应的线程ID可见进程资源管理器(technet.microsoft.com https://///bb896653.aspx Sysinternals en-US

    Linux,THREAD_OS_ID对应的值gettid()功能。这个值是暴露的,例如,使用性能PS我命令,或在proc文件系统(/程序/[pid]/任务/[tid])。更多信息,见(1)性能ps(1),和过程(5)man

  • RESOURCE_GROUP

    资源组的标签。这个值是NULL如果资源组不支持当前的网络或服务器配置(见资源组的限制

这个threads这些指标表:

  • 主键(THREAD_ID

  • 索引NAME

  • 索引PROCESSLIST_ID

  • 索引PROCESSLIST_USERprocesslist_host

  • 索引PROCESSLIST_HOST

  • 索引THREAD_OS_ID

TRUNCATE TABLE是不允许的threads

25.11.16.4的user_defined_functions表

这个user_defined_functions表包含每个用户自定义函数(UDF)一排的服务器组件或插件的注册,或由CREATE FUNCTION声明

user_defined_functions这些列有:

  • UDF_NAME

    “用户名称。冰的价值NULL如果函数注册一个CREATE FUNCTION声明是在卸载过程

  • UDF_RETURN_TYPE

    UDF返回值类型。价值是一个int十进制的real烧焦,或row

  • UDF_TYPE

    UDF型。价值是一个function(或标量)骨料

  • UDF_LIBRARY

    UDF库文件。的价值NULL如果UDF注册使用服务器组件的服务而不是由一个CREATE FUNCTION声明

  • UDF_USAGE_COUNT

    目前UDF使用计数

这个user_defined_functions这些指标表:

  • 主键(UDF_NAME

TRUNCATE TABLE是不允许的user_defined_functions

25.11.16.5的log_status表

这个log_status表提供的信息,支持在线备份工具复制所需的日志文件没有锁定这些资源的复制过程的持续时间。

log_status表查询,服务器块测井和足够长的时间来填充表相关的行政变化,然后释放资源。这个log_status表格通知在线备份这一点应该复制到主人的二进制日志gtid _ executed记录,并为每个复制通道的中继日志。它也为个人存储引擎提供的相关信息,如最后一个日志序列号(LSN),作为最后一个检查点LSNInnoDB存储引擎

这个log_status这些列的表:

  • SERVER_UUID

    此服务器实例的服务器的UUID。这是生成的唯一值的只读系统变量server_uuid

  • LOCAL

    日志的位置状态信息的掌握,提供一个与下列键单JSON对象:

    binary_log_file

    当前的二进制日志文件的名称。

    binary_log_position

    当前的二进制日志位置时log_status表访问

    gtid_executed

    在全球服务器变量的当前值gtid_executed在时间的log_status表访问。这一信息是一致的binary_log_filebinary_log_position钥匙

  • REPLICATION

    一个渠道的JSON数组,每个提供以下信息:

    channel_name

    的复制通道的名称。默认的复制通道的名称为空字符串(

    relay_log_file

    对于复制通道的电流继电器的日志文件的名称。

    relay_log_pos

    电流继电器的日志位置时log_status表访问

  • STORAGE_ENGINES

    从个人存储引擎的相关信息,提供一个与每个适用的存储引擎的一个关键的JSON对象。

这个log_status表没有索引

这个BACKUP_ADMIN特权是获取所需log_status

TRUNCATE TABLE是不允许的log_status

25.12性能模式选项和变量引用

表25.3绩效模式变量的引用

姓名命令行选项文件系统无功状态变量变量范围动态
performance_schema全球
performance_schema_accounts_lost全球
performance_schema_accounts_size全球
performance_schema_cond_classes_lost全球
performance_schema_cond_instances_lost全球
性能模式消费者活动阶段电流
性能模式消费者活动阶段的历史
性能模式消费者活动阶段历史悠久
性能模式消费事件的陈述当前
性能模式消费事件的陈述历史
性能模式消费事件的陈述历史悠久
性能模式消费者活动的交易流
性能模式消费者活动的交易历史
性能模式消费者活动的交易历史悠久
性能模式消费者活动等电流
性能模式消费者等历史事件
性能模式消费者事件等历史悠久
性能模式消费全球仪器仪表
性能模式消费报表摘要
消费者线程仪器性能模式
performance_schema_digest_lost全球
performance_schema_digests_size全球
performance_schema_events_stages_history_long_size全球
performance_schema_events_stages_history_size全球
performance_schema_events_statements_history_long_size全球
performance_schema_events_statements_history_size全球
performance_schema_events_transactions_history_long_size全球
performance_schema_events_transactions_history_size全球
performance_schema_events_waits_history_long_size全球
performance_schema_events_waits_history_size全球
performance_schema_file_classes_lost全球
performance_schema_file_handles_lost全球
performance_schema_file_instances_lost全球
performance_schema_hosts_lost全球
performance_schema_hosts_size全球
仪器性能模式
performance_schema_locker_lost全球
performance_schema_max_cond_classes全球
性能_模式_最大_条件_实例全球
performance_schema_max_digest_length全球
performance_schema_max_file_classes全球
performance_schema_max_file_handles全球
性能_模式_最大_ _队列实例全球
performance_schema_max_memory_classes全球
performance_schema_max_metadata_locks全球
performance_schema_max_mutex_classes全球
performance_schema_max_mutex_instances全球
performance_schema_max_prepared_statements_instances全球
performance_schema_max_program_instances全球
performance_schema_max_rwlock_classes全球
performance_schema_max_rwlock_instances全球
performance_schema_max_socket_classes全球
performance_schema_max_socket_instances全球
performance_schema_max_stage_classes全球
performance_schema_max_statement_classes全球
performance_schema_max_statement_stack全球
performance_schema_max_table_handles全球
有效的性能全球
performance_schema_max_thread_classes全球
performance_schema_max_thread_instances全球
performance_schema_memory_classes_lost全球
performance_schema_metadata_lock_lost全球
performance_schema_mutex_classes_lost全球
performance_schema_mutex_instances_lost全球
performance_schema_nested_statement_lost全球
performance_schema_prepared_statements_lost全球
performance_schema_program_lost全球
performance_schema_rwlock_classes_lost全球
performance_schema_rwlock_instances_lost全球
_性能会话连接模式_ _ _ attrs _迷失全球
_性能会话连接模式_ _ _ attrs _大小全球
performance_schema_setup_actors_size全球
performance_schema_setup_objects_size全球
performance_schema_socket_classes_lost全球
performance_schema_socket_instances_lost全球
performance_schema_stage_classes_lost全球
performance_schema_statement_classes_lost全球
performance_schema_table_handles_lost全球
performance_schema_table_instances_lost全球
performance_schema_thread_classes_lost全球
performance_schema_thread_instances_lost全球
performance_schema_users_lost全球
performance_schema_users_size全球

25.13绩效模式命令选项

性能模式参数可以在命令行上指定或选择文件服务器启动配置性能架构工具和消费者。运行时配置在很多情况下也是可能的(见25.4节,“性能模式运行时配置”),但启动配置时必须使用的运行时配置是影响已经初始化启动过程中仪器太晚。

性能模式消费者和仪器可以配置在启动时使用以下语法。额外的细节,看25.3节,“性能模式启动配置”

以下配置消费者个人物品:

25.14绩效模式的系统变量

性能架构实现了几个系统变量提供配置信息:

mysql> SHOW VARIABLES LIKE 'perf%';
+----------------------------------------------------------+-------+
| Variable_name                                            | Value |
+----------------------------------------------------------+-------+
| performance_schema                                       | ON    |
| performance_schema_accounts_size                         | -1    |
| performance_schema_digests_size                          | 10000 |
| performance_schema_events_stages_history_long_size       | 10000 |
| performance_schema_events_stages_history_size            | 10    |
| performance_schema_events_statements_history_long_size   | 10000 |
| performance_schema_events_statements_history_size        | 10    |
| performance_schema_events_transactions_history_long_size | 10000 |
| performance_schema_events_transactions_history_size      | 10    |
| performance_schema_events_waits_history_long_size        | 10000 |
| performance_schema_events_waits_history_size             | 10    |
| performance_schema_hosts_size                            | -1    |
| performance_schema_max_cond_classes                      | 80    |
| performance_schema_max_cond_instances                    | -1    |
| performance_schema_max_digest_length                     | 1024  |
| performance_schema_max_file_classes                      | 50    |
| performance_schema_max_file_handles                      | 32768 |
| performance_schema_max_file_instances                    | -1    |
| performance_schema_max_index_stat                        | -1    |
| performance_schema_max_memory_classes                    | 320   |
| performance_schema_max_metadata_locks                    | -1    |
| performance_schema_max_mutex_classes                     | 220   |
| performance_schema_max_mutex_instances                   | -1    |
| performance_schema_max_prepared_statements_instances     | -1    |
| performance_schema_max_program_instances                 | -1    |
| performance_schema_max_rwlock_classes                    | 40    |
| performance_schema_max_rwlock_instances                  | -1    |
| performance_schema_max_socket_classes                    | 10    |
| performance_schema_max_socket_instances                  | -1    |
| performance_schema_max_sql_text_length                   | 1024  |
| performance_schema_max_stage_classes                     | 150   |
| performance_schema_max_statement_classes                 | 192   |
| performance_schema_max_statement_stack                   | 10    |
| performance_schema_max_table_handles                     | -1    |
| performance_schema_max_table_instances                   | -1    |
| performance_schema_max_table_lock_stat                   | -1    |
| performance_schema_max_thread_classes                    | 50    |
| performance_schema_max_thread_instances                  | -1    |
| performance_schema_session_connect_attrs_size            | 512   |
| performance_schema_setup_actors_size                     | -1    |
| performance_schema_setup_objects_size                    | -1    |
| performance_schema_users_size                            | -1    |
+----------------------------------------------------------+-------+

性能模式系统变量可以在命令行或在选项文件服务器启动时,许多可以在运行时设置。看到25.12节,“性能模式选项和可变参考”

性能模式自动大小的几个参数的值在服务器启动时如果没有显式设置。有关更多信息,参见25.3节,“性能模式启动配置”

性能模式系统变量具有以下含义:

25.15性能模式状态变量

的性能架构提供了几个变量,有关仪器仪表的信息不能加载或由于内存限制了:

mysql> SHOW STATUS LIKE 'perf%';
+-------------------------------------------+-------+
| Variable_name                             | Value |
+-------------------------------------------+-------+
| Performance_schema_accounts_lost          | 0     |
| Performance_schema_cond_classes_lost      | 0     |
| Performance_schema_cond_instances_lost    | 0     |
| Performance_schema_file_classes_lost      | 0     |
| Performance_schema_file_handles_lost      | 0     |
| Performance_schema_file_instances_lost    | 0     |
| Performance_schema_hosts_lost             | 0     |
| Performance_schema_locker_lost            | 0     |
| Performance_schema_mutex_classes_lost     | 0     |
| Performance_schema_mutex_instances_lost   | 0     |
| Performance_schema_rwlock_classes_lost    | 0     |
| Performance_schema_rwlock_instances_lost  | 0     |
| Performance_schema_socket_classes_lost    | 0     |
| Performance_schema_socket_instances_lost  | 0     |
| Performance_schema_stage_classes_lost     | 0     |
| Performance_schema_statement_classes_lost | 0     |
| Performance_schema_table_handles_lost     | 0     |
| Performance_schema_table_instances_lost   | 0     |
| Performance_schema_thread_classes_lost    | 0     |
| Performance_schema_thread_instances_lost  | 0     |
| Performance_schema_users_lost             | 0     |
+-------------------------------------------+-------+

性能模式状态变量具有以下含义:

有关使用这些变量来检查性能模式状态信息,看25.7节,“性能模式状态监测”

25.16性能架构的内存分配模型

绩效架构使用这种内存分配模型:

  • 可分配内存在服务器启动

  • 可以分配额外的内存在服务器操作

  • 永远的免费存储在服务器的操作(虽然它可能被回收)

  • 释放所有内存用于关闭

结果是放松内存的限制,使性能模式可以用更少的配置,以降低内存占用,使消费规模的服务器负载。记忆取决于实际看到的负荷,不负载估计或明确配置。

几个性能架构尺寸参数自动定标的,不需要配置明确,除非你想建立一个显式的内存分配限制:

performance_schema_accounts_size
performance_schema_hosts_size
performance_schema_max_cond_instances
performance_schema_max_file_instances
performance_schema_max_index_stat
performance_schema_max_metadata_locks
performance_schema_max_mutex_instances
performance_schema_max_prepared_statements_instances
performance_schema_max_program_instances
performance_schema_max_rwlock_instances
performance_schema_max_socket_instances
performance_schema_max_table_handles
performance_schema_max_table_instances
performance_schema_max_table_lock_stat
performance_schema_max_thread_instances
performance_schema_users_size

一个自动定标参数,配置是这样的:

  • 设定值-1(默认),参数自动定标:

    • 相应的内部缓冲区是空的最初并没有分配内存。

    • 作为绩效模式收集数据,内存分配在相应的缓冲区。缓冲区的大小是无限的,并可与负荷增长。

  • 设置为0的值:

    • 相应的内部缓冲区是空的最初并没有分配内存。

  • 与设置的值N&#62; 0:

    • 相应的内部缓冲区是空的最初并没有分配内存。

    • 作为绩效模式收集数据,内存分配在相应的缓冲区中,直到缓冲区大小达到N

    • 一旦缓存大小达到N,没有更多的内存分配。通过这个缓冲性能模式采集的数据丢失,以及任何相应的失去的实例计数器是递增的

看到性能架构使用多少内存,检查为这一目的而设计的工具。性能架构分配内存内部和同事每个缓冲区与专用仪器使内存消耗可以追溯到个人的缓冲区。仪器带有前缀命名memory/performance_schema/暴露多少内存分配给这些内部缓冲区。缓冲区是全局服务器,所以设备都是在显示memory_summary_global_by_event_name表,而不在其他memory_summary_by_xxx_市_事件_ name

此查询显示与存储工具相关的信息:

SELECT * FROM memory_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'memory/performance_schema/%';

25.17性能模式和插件

删除插件UNINSTALL PLUGIN不影响已经收集代码的插件信息。花费在插件加载的代码执行时间还花了就算插件卸载后。相关的事件信息,包括综合信息,在保持可读性performance_schema数据库表。关于插件的安装和拆除的影响的更多信息,参见25.7节,“性能模式状态监测”

一个插件实现那些工具插件代码应该记录其仪器特性使那些插件的加载到其要求。例如,一个第三方的存储引擎应该包含在文档多少内存互斥等仪器的发动机需要。

25.18使用性能模式来诊断问题

性能架构是一个工具,帮助DBA做性能优化通过实际测量来代替猜测这一部分展示了使用性能模式用于这一目的的一些方法。这里的讨论依赖于事件过滤的使用,这是描述第25.4.2、绩效架构事件过滤”

下面的例子提供了一个方法,你可以用来分析一个可重复的问题,如调查的性能瓶颈。首先,你应该有一个可重复使用的情况下,表现为太慢了需要优化,你应该使所有的仪器(无预过滤所有)。

  1. 运行使用情况

  2. 使用性能模式表,分析性能问题的根本原因。这种分析将在很大程度上依赖后过滤。

  3. 对存在问题的领域,排除,禁用相应的仪器。例如,如果分析的结果表明,问题不是文件I / O在一个特定的存储引擎相关,禁用文件I/O设备,发动机。然后截史和汇总表,删除以前收集的事件。

  4. 在步骤1重复此过程

    在每次迭代中,绩效模式输出,特别是events_waits_history_long表,将包含越来越少噪音由无意义的工具造成的,鉴于此表的大小是固定的,会包含更多的相关数据,分析手头的问题。

    在每次迭代中,调查导致接近问题的根源,为信号/噪声率将提高,使分析更容易。

  5. 一旦一个性能瓶颈,找出根本原因,采取相应的纠正措施,如:

    • 服务器寄生虫(高速缓存,记忆,以及森林)。

    • 通过编写不同调查询,

    • 所有的数据库模式(the tables,指数,和我四)。

    • 优化的代码(这适用于存储引擎或服务器开发商只)。

  6. 重新开始在步骤1中,看到对性能的影响。

这个mutex_instances.LOCKED_BY_THREAD_IDrwlock_instances.write_locked_by_thread_id柱对性能瓶颈或死锁是非常重要的。这是由仪器性能架构如下:

  1. 假设线程1是坚持等待一个互斥。

  2. 你可以确定哪些线程正在等待:

    SELECT * FROM events_waits_current WHERE THREAD_ID = thread_1;
    

    说查询结果确定线程正在等待互斥体,发现events_waits_current.OBJECT_INSTANCE_BEGIN

  3. 你能确定哪个线程持有互斥体:

    SELECT * FROM mutex_instances WHERE OBJECT_INSTANCE_BEGIN = mutex_A;
    

    说查询结果识别出它是线程2持有互斥,如发现mutex_instances.LOCKED_BY_THREAD_ID

  4. 你可以看到哪些线程正在做:

    SELECT * FROM events_waits_current WHERE THREAD_ID = thread_2;
    

25.18.1查询使用性能模式分析

下面的示例演示如何使用性能架构声明事件和阶段的事件来检索数据与分析提供的信息SHOW PROFILESSHOW PROFILE声明.

这个setup_actors表可以被用来限制的历史事件的主机,用户收集,或帐户,减少运行时的开销和在历史表中收集的数据量。这个例子的第一步,展示了如何限制历史事件集合到一个特定的用户。

性能模式表现在皮秒事件定时器信息(万亿分之一秒)规范时序数据的标准单位。在下面的例子,TIMER_WAIT值除以1000000000000显示以秒为单位的数据。值也截断六位小数显示数据在相同的格式SHOW PROFILESSHOW PROFILE声明.

  1. 极限的历史事件的集合,将运行该查询用户。默认情况下,setup_actors配置为允许监测和历史事件的所有前台线程采集:

    MySQL的&#62;SELECT * FROM performance_schema.setup_actors;------ ------ ------ --------- --------- |主机|用户|作用|启用|历史| ------ ------ ------ --------- --------- | % % % | | |是|是| ------ ------ ------ --------- ---------

    在更新默认行setup_actors表禁用历史事件监测和收集所有的前台线程,并插入新的一行,使监测和历史事件,将运行该查询用户收集:

    MySQL的&#62;UPDATE performance_schema.setup_actors SET ENABLED = 'NO', HISTORY = 'NO'
           WHERE HOST = '%' AND USER = '%';MySQL的&#62;INSERT INTO performance_schema.setup_actors (HOST,USER,ROLE,ENABLED,HISTORY)
           VALUES('localhost','test_user','%','YES','YES');

    数据在setup_actors表应该现在出现类似下面的:

    MySQL的&#62;SELECT * FROM performance_schema.setup_actors;----------- ----------- ------ --------- --------- |主机|用户|作用|启用|历史| ----------- ----------- ------ --------- --------- | % % % | | |没有|没有| | localhost | test_user | % |是|是| ----------- ----------- ------ --------- ---------
  2. 确保报表和仪表是启用的更新阶段setup_instruments表一些工具可能已经默认启用。

    MySQL的&#62;UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
           WHERE NAME LIKE '%statement/%';MySQL的&#62;UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
           WHERE NAME LIKE '%stage/%';
  3. 确保events_statements_*events_stages_ *消费者使。一些消费者可能已经默认启用。

    mysql> UPDATE performance_schema.setup_consumers SET ENABLED = 'YES'
           WHERE NAME LIKE '%events_statements_%';
    
    mysql> UPDATE performance_schema.setup_consumers SET ENABLED = 'YES'
           WHERE NAME LIKE '%events_stages_%';
    
  4. 用户帐户下运行你的监控,声明要简介。例如:

    mysql> SELECT * FROM employees.employees WHERE emp_no = 10001;
    +--------+------------+------------+-----------+--------+------------+
    | emp_no | birth_date | first_name | last_name | gender | hire_date |
    +--------+------------+------------+-----------+--------+------------+
    |  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
    +--------+------------+------------+-----------+--------+------------+
    
  5. 识别EVENT_ID通过查询的语句events_statements_history_long桌子。这步是一种相似的。SHOW PROFILES识别query_id。下面的查询产生的输出类似于SHOW PROFILES

    MySQL的&#62;SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration, SQL_TEXT
           FROM performance_schema.events_statements_history_long WHERE SQL_TEXT like '%10001%';+----------+----------+--------------------------------------------------------+| event_id | duration | sql_text                                               |+----------+----------+--------------------------------------------------------+|       31 | 0.028310 | SELECT * FROM employees.employees WHERE emp_no = 10001 |+----------+----------+--------------------------------------------------------+
  6. 查询events_stages_history_long表的检索语句的舞台事件。阶段与使用嵌套语句事件。每个阶段有一个事件记录nesting_event_id列包含EVENT_ID母公司的声明

    MySQL的&#62;SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration
           FROM performance_schema.events_stages_history_long WHERE NESTING_EVENT_ID=31;| -----------------------------选择阶段选择阶段的持续时间| | -------------------------------- | / SQL /启动阶段| 0.000080 | | SQL /检查/阶段/权限| 0.000005 | | SQL /开业/ |舞台表| 0.027759 | SQL /初始化阶段| 0.000052 | | SQL /系统/阶段/锁| 0.000009 | | | /优化SQL 0.000006 | | SQL /期/统计期| 0.000082 | | SQL /准备/阶段/ | 0.000008 | | SQL /执行| 0.000000 | |舞台/ SQL /发送数据| 0.000017 | | SQL /期/阶段/最终| 0.000001~| | SQL /查询端| 0.000004 | | SQL /阶段/闭幕表| 0.000006 | | SQL /阶段/项目|释放0.000272 | SQL /清洗/ |舞台上| 0.000001~| -----------------------------选择