ACCESS[MySQL Reference Manual] 23 Performance Schema结构

23 MySQL Performance Schema

23 MySQL Performance Schema..
1

23.1 性能框架迅速启动…
3

23.2 性能框架配置…
5

23.2.1 性能框架编译时配置…
5

23.2.2 性能框架启动配置…
6

23.2.3 启动时性框架配置…
8

23.2.3.1 性能架构事件定时…
8

23.2.3.2 性能框架事件过滤…
9

23.2.3.3 事件预过滤…
10

23.2.3.4命名记录点或者消费者之过滤…
12

23.2.3.5 识别争已经给记录…
12

23.3 性能框架查询…
13

23.4 性能框架记录点命名约定…
13

23.5 性能框架和状态监控…
15

23.6 性能框架和分子原子性事件…
17

23.7 性能框架statement digests17

23.8 性能框架常用表特性…
19

23.9 性能框架表描述…
19

23.9.1 性能框架表索引…
19

23.9.2 性能框架setup表…
19

23.9.2.1 setup_actors表…
19

23.9.2.2 setup_consumers表…
20

23.9.2.3 setup_instruments表…
20

23.9.2.4 setup_objects表…
21

23.9.2.5 setup_timers表…
22

23.9.3 性能框架实例表…
22

23.9.3.1 cond_instances表…
22

23.9.3.2 file_instances表…
22

23.9.3.3 mutex_instances表…
22

23.9.3.4 Rwlock_instances表…
23

23.9.3.5 socket_instance表…
23

23.9.4 性能框架事件等表…
25

23.9.4.1 events_waits_current表…
26

23.9.4.2 Events_waits_history表…
28

23.9.4.3 events_waits_history_long 表…
28

23.9.5 性能框架Stage事件表…
28

23.9.5.1 events_stages_current表…
30

23.9.5.2 events_stage_history表…
30

23.9.5.3 events_stage_history_long表…
31

23.9.6 性能框架语句事件表…
31

23.9.7 性能框架事务表…
32

23.9.8 性能框架连接表…
35

23.9.9 性能框架连接属性表…
35

23.9.10 性能框架用户变量表…
35

23.9.11 性能框架复制表…
36

23.9.11.1
replication_connection_configure表…
38

23.9.11.2
replication_connection_status38

23.9.11.3
replication_applier_configure.
39

23.9.11.4 replication_applier_status39

23.9.11.5
replication_applier_status_by_coordinator39

23.9.11.6
replication_applier_statys_by_worker40

23.9.11.7 replication_group_members40

23.9.11.8
replication_group_member_status40

23.9.12 性能框架锁相关表…
41

23.9.12.1 metadata_locks41

23.9.12.2 table_handles42

23.9.13 性能框架体系变量表…
42

23.9.14 性能框架体系状态变量表…
43

23.9.15 性能框架统计表…
43

23.9.16 性能框架其他表…
44

23.10 性能框架选项和变量…
45

23.11 性能框架命令选项…
45

23.12 性能框架体系变量…
45

23.13 性能框架状态变量…
45

23.14 性能框架内存分配模型…
45

23.15 性能框架和…
46

23.16 使用性能框架诊断…
47

23.17 迁移到性框架体系及状态变量表…
47

 

MySQL Performance Schema用来监督MySQL
Server的运转运行在脚。性能框架来这些特征:

·         性能框架提供了扳平栽方法检查其中的劳动运行。通过PERFORMANCE_SCHEMA存储引擎以及performance_schema实现。性能框架主要关注被数据性。和INFORMANCE_SCHEMA不同,INFORMACE_SCHEMA主要检查长数据。

·         性能框架监控服务事件,事件是劳动用花费工夫的别样事物,并且一度深受记录如此时间信息方可被采集。通常一个事变可以是一个函数调用,一个操作系统等待,SQL语句执行的品随解析或者排序,或者全体讲话或者千篇一律组语句。时间采集提供。时间采集提供了合调用文件与表IO,表锁等消息。

·         性能框架事件之轩然大波和binlog的事件,事件调度的风波不同。

·         性能框架事件为指定到某个MySQL服务。性能框架表别人自身是地面服务,他们之改不见面让描写副到binary
log,也未会见为复制。

·         当前事件,历史事件以及波下结论是可用之,那么就算足以规定记录受启动了略微次,用了略微日子。事件信息可查指定线程的位移要指定对象的位移,比如文件和信号量。

·        
PERFORMANCE_SCHEMA存储引擎使用代码中之记录点来采访信息。

·         收集之信息于封存在performance_schema数据库被。可以据此select查询。

·         性能框架配置好动态的为涂改,通过改动performance_schema数据库配置数据收集。

·        
Performance_schema上之表是视图或者临时表,不见面保留及磁盘中。

·         MySQL支持有平台的监督。

·         通过以源代码中投入记录点实现数量搜集。没有一定线程使用相关的性能框架。

23.1 性能框架迅速启动

对此性框架而启用,必须要在MySQL编译的时节配置好。可以经过mysqld的提携验证。如果性能框架可用输出就会带来—performance_schema参数。

假若这些参数没有起,那么代码在编译时就是无支持性框架。

假如性能框架可用,默认是可用的。可以透过配备文件配置:

[mysqld]
performance_schema=ON

当服务启动,发现performance_schema就会见待初始化性能框架,可以翻performance_schema变量检查初始化是否中标。

mysql>
SHOW
VARIABLES LIKE ‘performance_schema’;

+——————–+——-+

|
Variable_name      | Value |

+——————–+——-+

|
performance_schema | ON    |

+——————–+——-+

这价值表示,性能框架已可用,如果也off表示出误,检查错误日志。

属性框架实现同贮引擎类似。如果引擎可用可以当show
engine查看是否支持PERFORMANCE_SCHEMA存储引擎。

Performance_schema中之数据库可让分开为几片,当前工夫,历史事件,总结,对象实例和安信息。

原先,其实并无是享有的记录点和收集器都是可用。所以性能框架不见面采集所有的数额。可以由此以下语句打开装有的积累点和收集器:

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查看时劳动在召开呀。每个线程都发出一行。

历史表,表结构及眼前事变相同,event_waits_history和event_waits_history_long表包含了每个线程最近10只event和每个线程最近10000只events。

一个新的轩然大波给在,老的轩然大波就是见面删除。

总结表提供了所有事件之会师的信息。这个表经过分组一不等措施计算事件数量。为了查看那个记录点呗执行之次数最多还是等待事件极丰富,通过对表上的count_star或者sum_timer_wait列进行排序:

mysql> SELECT EVENT_NAME, COUNT_STAR

    -> FROM events_waits_summary_global_by_event_name

    -> ORDER BY COUNT_STAR DESC LIMIT 10;

+---------------------------------------------------+------------+

| EVENT_NAME                                        | COUNT_STAR |

+---------------------------------------------------+------------+

| wait/synch/mutex/mysys/THR_LOCK_malloc            |       6419 |

| wait/io/file/sql/FRM                              |        452 |

| wait/synch/mutex/sql/LOCK_plugin                  |        337 |

| wait/synch/mutex/mysys/THR_LOCK_open              |        187 |

| wait/synch/mutex/mysys/LOCK_alarm                 |        147 |

| wait/synch/mutex/sql/THD::LOCK_thd_data           |        115 |

| wait/io/file/myisam/kfile                         |        102 |

| wait/synch/mutex/sql/LOCK_global_system_variables |         89 |

| wait/synch/mutex/mysys/THR_LOCK::mutex            |         89 |

| wait/synch/mutex/sql/LOCK_open                    |         88 |

+---------------------------------------------------+------------+

 

mysql> SELECT EVENT_NAME, SUM_TIMER_WAIT

    -> FROM events_waits_summary_global_by_event_name

    -> ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;

+----------------------------------------+----------------+

| EVENT_NAME                             | SUM_TIMER_WAIT |

+----------------------------------------+----------------+

| wait/io/file/sql/MYSQL_LOG             |     1599816582 |

| wait/synch/mutex/mysys/THR_LOCK_malloc |     1530083250 |

| wait/io/file/sql/binlog_index          |     1385291934 |

| wait/io/file/sql/FRM                   |     1292823243 |

| wait/io/file/myisam/kfile              |      411193611 |

| wait/io/file/myisam/dfile              |      322401645 |

| wait/synch/mutex/mysys/LOCK_alarm      |      145126935 |

| wait/io/file/sql/casetest              |      104324715 |

| wait/synch/mutex/sql/LOCK_plugin       |       86027823 |

| wait/io/file/sql/pid                   |       72591750 |

+----------------------------------------+----------------+

倘,上面结果THR_LOCK信号量是红,2独告知词分别代表执行之光热及等待事件长度。

实例表,记录了靶类型为记录了。当服务使用了一个记录对象,那么会发生一个事变。这些发明提供了轩然大波称为,解释性的注解或者状态。比如file_instances表,记录了文本io操作以及她俩相应的文件。

mysql> SELECT * FROM file_instances\G

*************************** 1. row ***************************

 FILE_NAME: /opt/mysql-log/60500/binlog.000007

EVENT_NAME: wait/io/file/sql/binlog

OPEN_COUNT: 0

*************************** 2. row ***************************

 FILE_NAME: /opt/mysql/60500/data/mysql/tables_priv.MYI

EVENT_NAME: wait/io/file/myisam/kfile

OPEN_COUNT: 1

*************************** 3. row ***************************

 FILE_NAME: /opt/mysql/60500/data/mysql/columns_priv.MYI

EVENT_NAME: wait/io/file/myisam/kfile

OPEN_COUNT: 1

...

Setup表用来布局和监督特点的,比如setup_timers表:

mysql> SELECT * FROM setup_timers;

+-------------+-------------+

| NAME        | TIMER_NAME  |

+-------------+-------------+

| idle        | MICROSECOND |

| wait        | CYCLE       |

| stage       | NANOSECOND  |

| statement   | NANOSECOND  |

| transaction | NANOSECOND  |

+-------------+-------------+

Setup_instruments列了什么可以为记录的事件。然后经过改动者表开控制是否启动这个记录。

mysql> UPDATE setup_instruments SET ENABLED = 'NO'

    -> WHERE NAME = 'wait/synch/mutex/sql/LOCK_mysql_create_db';

性能框架下,收集来之轩然大波来更新到performance_schema数据库,数据库作为事件信息之消费者。Setup_consumers表列出了可用之主顾。

支配是否性能框架保护一个客作为事件信息之对象。可以设置为enabled值。

23.2 性能框架配置

23.2.1 性能框架编译时布置

为吃性框架启用必须以编译时受部署,由官方提供的MySQL是支撑性框架的,如果是其它发布方发布之,那么要先行检查是不是支持。

设若是自源代码发布的,那么以揭示之时光要先安装:

shell>
cmake
. -DWITH_PERFSCHEMA_STORAGE_ENGINE=1

于MySQL 5.7.3事后,也可支撑启动性能框架,但是不含有有的记录点,比如:

shell>
cmake
. -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \

       
-DDISABLE_PSI_STAGE=1
\

       
-DDISABLE_PSI_STATEMENT=1

若是你安装MySQL到一个老的装置及,并且没有布置了性框架,当确保performance_schema数据库含了具有的目前表后,可以动用mysql_upgrade启动服务。然后再度开,有只迹象要特别专注:

[ERROR]
Native table ‘performance_schema’.’events_waits_history’ has the
wrong structure
[ERROR] Native table
‘performance_schema’.’events_waits_history_long’has the wrong
structure

由此以下查看mysql是否支持性框架:

shell>
mysqld
–verbose –help

 
–performance_schema

                     
Enable the performance schema.

 
–performance_schema_events_waits_history_long_size=#

                     
Number of rows in events_waits_history_long.

否足以经连日到劳动后采取show engine查看是否是PERFORMANCE_SCHEMA存储引擎。如果以build的时光从不让部署那么show engines不见面显得PERFORMANCE_SCHEMA存储引擎。

23.2.2 性能框架启动配置

设若性能框架是可用的,那么默认是开行之呢可以安排文件中配置:

[mysqld]
performance_schema=ON

假定服务不克于初始化性能框架的当儿分配里缓存,那么性能框架自己关以安装performance_schema为off,服务以没记录点状况下运作。

性能框架可以以令执行参数方式配置。

–performance-schema-instrument=’instrument_name=value

关闭所有记录点:

–performance-schema-instrument=’%=OFF’

比较长的记录点名会比少的积聚点名要事先受短的模式名,不管顺序。

切切实实可扣押后面章节:23.2.3.4命名记录点或者消费者的过滤

一个无法别识别的记录点名会被忽视。为了操纵消费者,可以行使以下选项:

–performance-schema-consumer-consumer_name=value

consumer_name凡是一个顾客名比如events_waits_history,value是以下一个价:

l  OFF,False或者0:不采访者消费者之风波

l  ON,True或者1:收集顾客之轩然大波

照消费者誉为是events_waits_history:

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

给允许的买主誉为好于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代表了性能框架是否启动,别的参数表示表底酷小伙内存分配的值。

可使用安排文件开始安这些变量:

[mysqld]

performance_schema

performance_schema_events_waits_history_size=20

performance_schema_events_waits_history_long_size=15000

倘没有点名值,那么默认这些变量会发一个默认值。在MySQL
5.7.6,性能框架分配内存会冲劳动可增加伙子减少,而不是以劳务启动的时一次性分配好。所以广大参数并不需要在开行之下还分配好,更多内容可看23.12
性能框架体系变量。

每个机关分配的参数不是当启动时设置或设置也-1,性能框架决定如何根据以下的参数来设置这些价值:

max_connections

open_files_limit

table_definition_cache

table_open_cache

要是要是盖机关装的值或者电动范围的值,就于开行之时段装一个加以的价如果不是吃-1如此性能框架就会装一个加的价值。

每当运作时,show variables会显示自动装的价值,自动范围设置的会晤被-1.而性能框架为禁用,自动装与自行范围参数还见面让设置为-1,并且亮也-1.

23.2.3 启动时性框架配置

23.2.3.1 性能架构事件定时

事件于集也就是说记录点被加到了劳动源代码中。记录点时间事件,是性框架如何提供一个事变络绎不绝多久的方案。也得安排记录点收集定时信息。

特性框架定时器

2单属性框架表提供了定时器信息:


Performance_timers,保存了可用之timers和它们的风味。


Setup_timers,表明了什么记录点使用了谁timers。

每个setup_timers使用的计时器躲在performance_timers表中。

mysql>
SELECT
* FROM performance_timers;

+————-+—————–+——————+—————-+

|
TIMER_NAME  | TIMER_FREQUENCY | TIMER_RESOLUTION | TIMER_OVERHEAD
|

+————-+—————–+——————+—————-+

|
CYCLE       |      2389029850 |                1 |             72
|

|
NANOSECOND  |      1000000000 |                1 |            112
|

|
MICROSECOND |         1000000 |                1 |            136
|

|
MILLISECOND |            1036 |                1 |            168
|

|
TICK        |             105 |                1 |           2416
|

+————-+—————–+——————+—————-+

TIMER_NAME:表示可用timer的名字,CYCLE表示给予cpu计数器

TIMER_FREQUENCY:表示每秒的timer个数。对于cycle timer,频率和cpu事件相关,其他timer是秒的几何私分。

TIMER_RESOLUTION:表示每次多的单位

TIMER_OVERHEAD:指定周期获取一个定时需要之绝小cycles个数。每个事件都见面于初步同收之时调用timer,因此是展示的载重的2倍。

修改setup_timer表的timer_name:

mysql>
UPDATE
setup_timers SET TIMER_NAME = ‘MICROSECOND’

   
-> WHERE
NAME = ‘idle’;

mysql>
SELECT
* FROM setup_timers;

+————-+————-+

|
NAME        | TIMER_NAME  |

+————-+————-+

|
idle        | MICROSECOND |

|
wait        | CYCLE       |

|
stage       | NANOSECOND  |

|
statement   | NANOSECOND  |

|
transaction | NANOSECOND  |

+————-+————-+

默认性能框架会呢每个记录点类型设置timer,也得以修改。

对此记录等事件的年华,最要害的是于时精度达减小负荷,所以使用cycle
timer最合适。

对谈或者stage的尽于实行一个略的等待要死之基本上,并且需要一个准儿的量,并且与电脑无关,所以极不要使用cycle。默认使用NANOSECOND。尽管负荷比cycle要十分,但是不根本,因为调用2次计数器的数量级远远比执行报告句我的cpu时间而略微。

Cycle提供的精度和cpu有关,如果处理器是1Gh要另行胜,cycle可以提供比纳秒还聊之速。使用cycle计数器比得一个一如既往上的其实事件支出小。

Cycle的缺点:

l  从cycles转化为日单位是于费心的。为了还快,这个转化操作知识非常粗的乘法计算。

l  处理器cycle,可能会见漫,比如笔记本上省电模式,那么cpu
cycle会下降而cpu cycle有变乱,那么转化就会见错。

l  Cycle 计数器可能是不指谱的或者不可用的,和电脑或者操作系统有关。

l  一些处理器,乱序执行或者多处理器同步,可能会见招计数器忽高忽低。

特性框架计数器在波被之变现

储存在性质框架表的脚下事变,有3个列表示事件,TIMER_START,TIMER_END表示事件启动同收,TIMER_WAIT表示事件的日子。

Set_instruments表有ENABLED字段来代表,事件是否要采访。TIMED字段表示记录点是否给岁月标记。如果记录点没有启动,那么就是未会见扭转事件。如果不是timed,那么生成的风波,中TIMER_START,TIME_END,TIMER_WAIT是null。那么当统计表计算最酷时,最小时间的当儿会叫忽略。

内,事件启动之上,timer因被一定的单位保存在事变中,当要显得的时候,timers被显示为规范的轩然大波单位,不管选择了呀timer都见面来得为,皮秒。

Setup_timers的修改会立即见效。已经以处理的见面使老的timer。为了不招力不从心预想的结果出现,最好先管统计表使用truncate
table进行重置。

Timer的基线,在劳动启动的时候被初始化。TIMER_START,TIMER_END代表于基线以来的皮秒数。TIMER_WAIT表示占用的皮秒。

23.2.3.2 性能框架事件过滤

事件是因生产者消费者模式处理的:

l  记录点代码是事件之来源于,产生事件于用来收集,setup_instruments表列出了足吃采访的记录点。Setup_instruments表提供了诸多event的发。

l  性能框架表示事件之目的地。Setup_consumers,列有了富有顾客类型。

预过滤,通过改动性能框架配置好,可以经启用或剥夺记录点和消费者就。使用预过滤的目的:

n  减少负荷。性能框架运行需要吃资源,虽然大少。

n  不关注的波可以免写副消费者受到。

n  避免维护多单类别的风波表明。

·           事后过滤,可以采用where语句以询问性能框架的下过滤。

23.2.3.3 事件预过滤

预过滤有性能框架形成同时会全局的熏陶所有用户。预过滤可以在劳动者或者消费者之处理阶段及:

·           几独说明得就此来安排生产者的预过滤:

§  
Setup_instruments说明哪个记录点是可用的,如果此发明上一个记录点被禁用,不管其他表怎么布局,都不见面又产生事件。

§  
Setup_objects控制了性能框架特定表和仓储过程对象。

§   Threads表示是勿是每个服务线程都来监控

§  
Setup_actors新的后台进程的始监控状态

·           要配备优先过滤在顾客等,那么一旦改setup_comsumers表。setup_comsumers也会潜移默化事件之生。如果指定的事件不见面发送给其它地方,那么性能框架不见面生出

改任意表都见面及时影响监控,但是小不同:

·         修改某些setup_instruments表只有的服务启动的时段生效。在运作时修改不见面生效。

·         修改setup_actors表,只会潜移默化后台线程。

当修改监控配置,性能框架不见面刷新历史表。历史表和脚下表明底风波非见面让轮换,除非又新的轩然大波。如果禁用一个记录点的上,需要等待一段时间,来替换老的风波。也得据此truncate
table清空。

在改了记录点之后,可能产特别药伤处summary表清理统计信息对于events_statements_summary_by_digest或者内存统计表。Truncate table只见面重置值为0,并无见面删除行。

23.2.3.3.1 记录点预过滤

支配记录点的过滤,是过滤setup_instruments表设置enables字段。修改setup_instruments大多数会这见效。对于一些记录点,修改只是会以服务器启动才会立竿见影。setup_instruments提供了无以复加中心的记录点控制。

23.2.3.3.2 对象预过滤

Setup_objects表控制了性框架部分表和储存过程。修改Setup_objects会及时相应。

mysql>
SELECT
* FROM setup_objects;

+————-+——————–+————-+———+——-+

|
OBJECT_TYPE | OBJECT_SCHEMA      | OBJECT_NAME | ENABLED | TIMED
|

+————-+——————–+————-+———+——-+

OBJECT_TYPE:表示对象类型,比如表或者波,存储过程等。

OBJECT_SCHEMA和OBJECT_NAME包含了schema或者目标名之字符串,也可以是通配符

ENABLED列表示对象是否让监控,TIMED列表示是否收集timing信息。

默认会收集除了mysql,information_schema,performance_schema外有的之数据库对象。

23.2.3.3.3 线程预过滤

threads表为每个线程保存了一条龙数。每行数据还带有了线程的消息以表明是否受监控。对于性框架监控一个线程必须满足一下他准:

·         表sestup_consumers表中的thread_instrumentation必须为yes

·        
Threads.instrumented列必须为yes

·         只监控setup_instruments表中之记录点

threads表也证实了每个服务线程是否履行历史事件记录。如果一旦记录历史事件以下原则且不能不也真:

·         对应的客配置,setup_consumers表必须也yes。

·        
Threads.HISTORY列必须为yes。

·         只监控setup_instruments表中之记录点

对于后台线程,instrumented和history的开头数据,取决于setup_action中的配备。

mysql>
SELECT
* FROM setup_actors;

+——+——+——+———+———+

|
HOST | USER | ROLE | ENABLED | HISTORY |

+——+——+——+———+———+

|
%    | %    | %    | YES     | YES     |

+——+——+——+———+———+

thread表的instrumented和history的平整如下:

·         如果最佳匹配,enabled=yes,那么instrumented=yes,最佳匹配history=yes,那么threads表的history=yes

·         如果最佳匹配,enabled=no,那么instrumented=no,最佳匹配history=no,那么threads表的history=no

·         如果无法配合,那么instrumented,history都也no

以mysql 5.7.6 之前,没有enabled字段,只要有相当,那么instrumented=yes

当mysql5.7.8,之前,没有history字段,线程要无浑可以进来history要无都非能够,取决于setup_consumer的配置。

默认,后台的富有线程都是碰头为记录之,因为setup_actors有一行都是‘%’。

23.2.3.3.4 消费者预过滤

Setup_cunsumers表包含了具备的顾客。修改是表来过滤那些event会被发送。

Setup_consumers表中装置消费者,从高级到低级。主要的尺度如下:

·           除非性能框架检查消费者,并且消费者是可用的,不然不会受到消息。

·           只有当顾客因的富有的顾客都可用了,才见面让检查

·           被据之买主,有好的依赖消费者。

·           如果一个事件没目的,那么性能框架不会见受起。

全局和线程消费者

·          
Global_instrumentation是高级消费者,如果global_instrumentation为no,那么富有的底全局记录点都被剥夺。所有其他低级的都非会见于检查。当global_instrumentation启动了,才会错过反省thread_instrumentation

·          
Thread_instrumentation,如果是no,那么这个级别下的级别都未会见为检查,如果是yes,性能框架就会保护线程指定信息,并且检查events_xxx_current消费者。

Wait Event消费者

这些消费者,需要global_instrumentation,thread_instrumention为yes。如果给检查行为如下:

·          
Events_waits_current,如果也no,禁用对各个wait
event收集。如果为yes检查history消费者及history_long消费者。

·          
Events_waits_history,如果上面也no不检查,为yes,收集各个等待事件。

·          
Events_waits_history_long,和点类似

Stage event,statement event和点类似。

23.2.3.4命名记录点或者消费者的过滤

好针对点名记录名或者消费者进行过滤:

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%’;

23.2.3.5 识别争已经被记录

经过检查setup_instruments表,你可识破包含了什么记录点被记录:

mysql>
SELECT
* FROM setup_instruments WHERE NAME LIKE
‘wait/io/file/innodb/%’;

+————————————–+———+——-+

|
NAME                                 | ENABLED | TIMED |

+————————————–+———+——-+

|
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   |

+————————————–+———+——-+

23.3 性能框架查询

预过滤限制了哪事件信息让采集,很多用户都不比。可以经select过滤event。

mysql>
SELECT
THREAD_ID, NUMBER_OF_BYTES

   
-> FROM
events_waits_history

   
-> WHERE
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 |

+———–+—————–+

23.4 性能框架记录点命名约定

记录点命名是平串组件然后用‘/’分割:

wait/io/file/myisam/log
wait/io/file/mysys/charset
wait/lock/table/sql/handler
wait/synch/cond/mysys/COND_alarm
wait/synch/cond/sql/BINLOG::update_cond
wait/synch/mutex/mysys/BITMAP_mutex
wait/synch/mutex/sql/LOCK_delete
wait/synch/rwlock/sql/Query_cache_query::lock
stage/sql/closing tables
stage/sql/Sorting result
statement/com/Execute
statement/com/Query
statement/sql/create_table
statement/sql/lock_tables

记录点命名类似于树形结构。从左到右越来越详细,组件的名目以来与计数器类型。

名字由2有的构成:

·           组件名,比如mysiam

·           变量名,一栽是全局变量,还有雷同栽是class::value。值class类中的变量。

头号记录点组件

·          
Idle:表示idle事件的记录点。

·          
Memory:memory事件记录点

·          
Stage:阶段事件记录点

·          
Statement:语句事件记录点

·          
Transaction:事务事件记录点

·          
Wait:等待事件记录点

Idle记录点组件

Idle记录点用于idle事件,具体看:23.9.3.5 socket_instance表

内存记录点组件

重重内存记录点默认是无可用的,可以手动启动,修改setup_instruments表。记录点前缀,memory/performance_schema/表示有微性能框架内的内存分配。memory/performance_schema/总是启用的,并且不能够叫剥夺。这起记录点被采访在 memory_summary_global_by_event_name表。

Stage记录点组件

Stage表示语句阶段性处理的随sorting
result或者sending data。

晓句记录点组件

·          
Statement/abstract/*: 抽象语句操作记录点。抽象记录点在言辞早期采取。

·          
Statement/com :是记录点命令操作。并且有名字对应到com_xxx操作,比如statement/com/Connect 和 statement/com/Init DB对应到COM_CONNECT和COM_INIT_DB命令。

·          
Statement/scheduler/event:单个记录点用来跟所有事件调度生成的事件。

·          
Statement/sp :存储过程实行中的记录点,比如statement/sp/cfetch
和statement/sp/freturn,用来游标获取与函数返回。

·          
Statement/sql:sql操作的记录点,比如statement/sql/create_db和statement/sql/select,用于创造数据库及select语句。

等待记录点指令

·          
Wait/io,io操作记录点

§  
Wait/io/file:文件io操作记录点,对于文本,等待是等待文件操作文件就。因为缓存的涉及,物理文件io可能于这操作及未见面执行

§  
Wait/io/socket:socket操作记录点,socket记录点有坐下命名格式:wait/io/socket/sql/socket_type。服务来一个监听socket用来支持每个网络协议。这个记录点支持监听socket是tcpip或者unix
socket文件。socket_type的值为server_tcpip_socket或者server_unix_socket。当监听socket发现一个连接,服务把这连续转换到独门的线程。那么新的连天线程的socket_type为client_connection。

§   Wait/io/table:
表io操作记录点。包含持久性表或者临时表的实践级别访问。对行的熏陶就是fetch,insert,update,delete。对于视图,是吃视图引用的基表。和另外等待不同,表底io等待报货其他等待。比如表io可能带有,文件io或者内存操作。因此events_waits_current中对此实施的等候或发生2行。

·          
Wait/lock ,锁操作的记录点

§  
Wait/lock/table,表锁记录点操作

§  
Wait/lock/metadata/sql/mdl,元数据所操作

·          
Wait/synch,同步对象记录点

§  
Wait/synch/cond,条件让用来一个线程通知另外一个线程,某些其等待的事物既完结。如果一个线程等待一个准,那么会醒来并且处理。如果多个线程等待那么会还新来并且成功它等待的资源。

§  
Wait/synch/mutex,多排异对象用来走访一个资源,防止其他线程访问资源。

§  
Wait/synch/rwlock,一个念写锁对象用来锁定特定的变量,防止其他线程使用。一个共享读所可以多单线程同时取得。一个解除他形容锁只能由一个线程获取。

§  
Wait/synch/sxlock,共享排他锁是朗诵写锁的rwlock的如出一辙栽,提供当一个线程写时,其他线程可以非一致性读。Sxlock于mysql 5.7蒙利用以优化rwlock的抑见。

23.5 性能框架和状态监控

可以用show status like ‘%perf%’查看性能框架的状态。

属性框架状态变量提供了关于记录点因为内存的缘由并未为创造或者加载的音。根据状态命名有几乎类:

·          
Performance_Schema_xxx_class_lost,表示来多少xxx类型的记录点不可知为加载。

·          
Performance_schema_xxx_instance_lost,表示有略xxx类型的记录点不克于创造。

·          
Performance_schema_xxx_handlees_lost,表示出小xxx类型的记录点不能够被辟。

·          
Performance_schema_locker_lost,表示来微微时还是要没吃记录。

按部就班,一个信号量是记录点,但是服务不可知也记录点分配内存。那么会大增performnace_schema_mutex_classes_lost。但是信号量还是因为用来对象同。但是性能数据就是无法被采访,如果记录点被分配,用来初始化记录点信号量实体。对于单身的信号量比如全局信号量,只发一个实例。有些信号量的实例个数会变,比如每个连的信号量。如果服务不能够缔造一个点名记录点信号量实体,就会见大增,performance_schema_mutex_instance_lost。

设若来以下标准:

·           服务启动参数,–performance_schema_max_mutex_classes=200,因此有200个信号量空间。

·           150信号量已经给加载

·           插件plugin_a有40只信号量

·           插件plugin_b有20只信号量

劳务呢插件,分配信号量记录点依赖让已经分配了多少,比如以下语句:

INSTALL
PLUGIN plugin_a

那服务已经起了150+40个信号量。

UNINSTALL
PLUGIN plugin_a;

虽然插件都卸载,但是还是产生190独信号量。所有插件代码生成的历史数据或者管用。但是乍的记录点事件未见面吃分配。

INSTALL
PLUGIN plugin_a;

服务意识40独记录点已经被分配,因此新的记录点不会见受创造,并且之前分配的内部buffer会被重新行使,信号量还是190独。

INSTALL
PLUGIN plugin_b;

此动用可用信号量已经只有出10单了,新的插件而20只记录点。10只已为加载,10独照面给收回或少。Performance_schema_mutex_classes_lost会标记这些丢失的记录点。

mysql>
SHOW
STATUS LIKE “perf%mutex_classes_lost”;

+—————————————+——-+

|
Variable_name                         | Value |

+—————————————+——-+

|
Performance_schema_mutex_classes_lost | 10    |

+—————————————+——-+

1
row in set (0.10 sec)

Plugin_b任然会征集执行有记录点。

当服务不克创一个信号量记录点,那么会来以下状况:

·           不会见发新行被插到setup_instruments表

·          
Performance_Schema_mutex_classes_lost增加1

·          
Performance_schema_mutex_instance_lost,不会见转。

点描述的适用于有记录点,不单单是信号量。

当Performance_Schema_mutex_classes_lost大于0那么有2种情况:

·           为了保存有内存,你可启动,Performance_Schema_mutex_classes=N,N小于默认值。默认值是满足加载所有插件的mysql发布。但是部分插件而无加载可能会见掉一些。比如您得免加以载默写存储引擎。

·           你加载一个老三正值插件,是性质框架的记录点,但是于服务启动之早晚,不容许插件记录点内存获取。因为来自第三方,这个引擎的记录点内存并无见面被记录在performance_schema_max_mutex_classes.
假如服务不能够满足插件记录点的资源,没有出示的分配还多之 performance_schema_max_mutex_classes,那么漫长会并发记录点的饥饿。

 

如果performance_schema_max_mutex_classes.太小,没有错会受形容副到不当日志,并且在运转时无错误。然而performance_schema上之表会丢失事件。performance_schema_max_mutex_classes_lost状态变量只是符号一些风波因缔造记录点失败为删。

 

设记录点没有少,那么即使见面通知性能框架,当以代码中(THD::LOCK_delete)创建了信号量,单个记录点就见面叫运用。那么尽管待过多信号量实体。这个时段,每个线程都有lock_delete,比如有1000个线程,1000个lock_delete信号量记录点实例。

如果服务没有空间存放有1000个信号量记录点实体,一些信号量会受创造记录点,一些尽管不见面被创造。如果服务功能创造800只,那么另外200独见面少,Performance_schema_mutex_instances_lost会增加200个。

Performance_schema_mutex_instances_lost,可能以苟初始化的信号量记录点大于配置的Performance_schema_mutex_instances=N那么旷日持久会发出。

要是SHOW STATUS LIKE ‘perf%’没有丢失任何事物,那么新能框架数据是可于因之。如果生局部且是了,那么数量是不完的,并且性能框架不见面记录有。这样Performance_schema_xxx_lost就说明了问题范围。

有些时候饿时好平衡的,比如你可能无欲文件io的数目,那么可拿具有性能框架参数,和文件io相关的还安装为0,那么旷日持久无会见将内存分配到与文件有关的接近,对象实例或者语句柄中。

23.6 性能框架和成员原子性事件

对一个阐明的io事件,通常发生2行在events_waits_current,不是一个设:

Row#
EVENT_NAME                 TIMER_START TIMER_END
—- ———-                 ———– ———
   1 wait/io/file/myisam/dfile        10001 10002
   2 wait/io/table/sql/handler        10000 NULL

实行获得会导致文件读取。比如,表io获取事件于文书io事件前,但是还未曾水到渠成。那么文件io嵌入在表io事件。

与其余原子性等待事件不同,表io事件是成员,包含其他事件。Events_waits_current中,表io事件便有2行:

·           一行是时表io等待事件

·           一行是其他任何类型的等事件。

一般性,其他品类的待事件未是表io事件。当称事件就,会从events_waits_current中消失。

23.7 性能框架statement digests

MySQL服务产生力量保护statement digest信息。Digest进程将一个sql语句转化为业内的格式并且计算一个hash结果。标准化允许相似的言辞分组并且总结暴露一些言的项目及发的频率。

以性质框架,语句digest涉及这些零件:

·          
Setup_comsumers的statement_digset控制了,性能框架如何维护digest信息。

·           语句子事件表明出列包含digest和系的价值的排:

§  
DIGEST_TEXT,标准化的讲话。

§   DIGEST,是digest MD5 hash值。

Digest计算,最充分的可用空间1024B。MySQL 5.7.8继斯价好透过参数,performance_schema_max_digest_length修改。之前使用max_digest_length。

·           语句子事件表明也出sql_text列包含了土生土长之sql语句。语句显示的绝充分呢1024B,可以由此performance_schema_max_sql_text_length字段修改。

·          
events_statements_summary_by_digest,提供综合的语句digset信息。

极一个语转化,会保留语句结构,删除不必要之音:

·           对象标识符,比如表或者数据库名会被封存。

·           文本值会吃轮换成变量。

·           注释会受删去,空格会被调整。

依照如下2单告知句:

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 > ?

于每个标准化的说话提供一个DIGEST_TEXT和DIGEST一个hash值。语句Digest总结表,提供了话的profile信息,显示语句运行效率运行次数等于。

events_statements_summary_by_digest大小固定的,所以要满了,如果在表上没有匹配的,那么具有的说话都见面为算以schema_name和digest为null的笔录中,当然好加digest大小,performance_schema_digests_size,如果没点名,那么性能框架会协调评估一个价。

performance_schema_max_digest_length系统变量支配digest buffer最可怜可用字节。但是现实的语句digest的长短往往比buffer长,那是因根本字和文本值的涉。也就是说digest_text的长可能超过performance_schema_max_digest_length。

对此应用程序生成了酷丰富之语,只有最终不同,增加performance_schema_max_digest_length可以为digest得以计算,识别语句。反过来减少performance_schema_max_digest_length会导致服务牺牲颇少之内存来保存语句之digest,但是多了话的相似度,被当成同一个digest。如果长要求加上,那么保存的啊要再次多。

可透过show engine performance_schema
status语句,或者监察之下语句查看sql语句保存使用的内存量。

mysql> SELECT NAME FROM setup_instruments

    -> WHERE NAME LIKE '%.sqltext';

+------------------------------------------------------------------+

| NAME                                                             |

+------------------------------------------------------------------+

| memory/performance_schema/events_statements_history.sqltext      |

| memory/performance_schema/events_statements_current.sqltext      |

| memory/performance_schema/events_statements_history_long.sqltext |

+------------------------------------------------------------------+

 

mysql> SELECT NAME FROM setup_instruments

    -> WHERE NAME LIKE 'memory/performance_schema/%.tokens';

+----------------------------------------------------------------------+

| NAME                                                                 |

+----------------------------------------------------------------------+

| memory/performance_schema/events_statements_history.tokens           |

| memory/performance_schema/events_statements_current.tokens           |

| memory/performance_schema/events_statements_summary_by_digest.tokens |

| memory/performance_schema/events_statements_history_long.tokens      |

+----------------------------------------------------------------------+

23.8 性能框架常用表特性

Performance_schema数据库是聊写的,数据库中的表名也是稍微写的。查询而动用小写。

许多表在performance_schema数据库是不过读的非可知让改动。一些setup表的一点列好为改。一些乎堪为插和去。事务可以吃允许清理集的事件,所以truncate
table可以据此来清理信息。

Truncate table可以当总结表及采用,但是不能够重events_statements_summary_by_digest和内存总结表上行使,效果只是将一起列清理为0.

23.9 性能框架表描述

23.9.1 性能框架表索引

具体看:http://dev.mysql.com/doc/refman/5.7/en/performance-schema-table-index.html

23.9.2 性能框架setup表

Setup表提供关于当前收集点启用信息。使用说明而休是全局变量提供了再度胜似级别的习性框架配置。比如您得应用一个sql语句配置多独记录点。

这些setup表示可用之:

·          
Setup_actors:如何初始化后台线程

·          
Setup_consumers:决定哪些信息会让发送和仓储。

·          
Setup_instruments:记录点对象,哪些事件而吃集。

·          
Setup_objects:哪些对象要于监控

·          
Setup_timers:当前事变定时器。

23.9.2.1 setup_actors表

setup_actors表包含了音信决定是否监控或对新的后台线程进行历史数据记录。这个表默认最多100实施,可以通过修改参数performance_schema_setup_actors_size修改尺寸。

对于新的后台线程,在setup_actors中,性能框架满足的用户以及host。如果一个行负荷enabled,histroy列,对许交threads表上之instrumented和history列。如果搜索不顶相当那么instrumented和history列就也no。

对于后台线程, Instrumented和history默认都是yes,setup_actors默认没有限定。

Setup_actors初始化内容,不过滤任何数据:

mysql>
SELECT
* FROM setup_actors;

+——+——+——+———+———+

|
HOST | USER | ROLE | ENABLED | HISTORY |

+——+——+——+———+———+

|
%    | %    | %    | YES     | YES     |

+——+——+——+———+———+

修改setup_actors表只见面影响后台线程,不会见潜移默化已在的线程。为了影响就有的threads表,修改instrumented和history列。

23.9.2.2 setup_consumers表

Setup_consumers表列了逐条项目的买主:

mysql>
SELECT
* FROM setup_consumers;

+———————————-+———+

|
NAME                             | ENABLED |

+———————————-+———+

|
events_stages_current            | NO      |

|
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      | NO      |

|
events_transactions_history      | NO      |

|
events_transactions_history_long | NO      |

|
events_waits_current             | NO      |

|
events_waits_history             | NO      |

|
events_waits_history_long        | NO      |

|
global_instrumentation           | YES     |

|
thread_instrumentation           | YES     |

|
statements_digest                | YES     |

+———————————-+———+

Setup_consumers设置形成由高交小的级别。形成依赖,如果大级别之装置了没有级别才见面出机遇让检查。

23.9.2.3 setup_instruments表

Setup_consumers表列了装有记录点对象:

mysql> SELECT * FROM setup_instruments;

每个记录点被长至源代码中,都见面于这表及生一行,即使记录点代码没有给指定。当一个记录点启动了要执行了,记录点实例就会被创造会显示在*_instrances表。

修改setup_instruments行会马上影响监控。对于有记录点,修改就见面在下次起先才会收效。在指定时修改并无见面立竿见影。

23.9.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 | ENABLED | TIMED |

+-------------+--------------------+-------------+---------+-------+

| EVENT       | mysql              | %           | NO      | NO    |

| EVENT       | performance_schema | %           | NO      | NO    |

| EVENT       | information_schema | %           | NO      | NO    |

| EVENT       | %                  | %           | YES     | YES   |

| FUNCTION    | mysql              | %           | NO      | NO    |

| FUNCTION    | performance_schema | %           | NO      | NO    |

| FUNCTION    | information_schema | %           | NO      | NO    |

| FUNCTION    | %                  | %           | YES     | YES   |

| PROCEDURE   | mysql              | %           | NO      | NO    |

| PROCEDURE   | performance_schema | %           | NO      | NO    |

| PROCEDURE   | information_schema | %           | NO      | NO    |

| PROCEDURE   | %                  | %           | YES     | YES   |

| TABLE       | mysql              | %           | NO      | NO    |

| TABLE       | performance_schema | %           | NO      | NO    |

| TABLE       | information_schema | %           | NO      | NO    |

| TABLE       | %                  | %           | YES     | YES   |

| TRIGGER     | mysql              | %           | NO      | NO    |

| TRIGGER     | performance_schema | %           | NO      | NO    |

| TRIGGER     | information_schema | %           | NO      | NO    |

| TRIGGER     | %                  | %           | YES     | YES   |

+-------------+--------------------+-------------+---------+-------+

修改setup_objects表会马上影响监控。

对于setup_objects,object_type代表监控了安对象类型。如果没有匹配的object_schema,object_name。那么就未会见时有发生对象没监控。

23.9.2.5 setup_timers表

Setup_times表如下:

mysql> SELECT * FROM setup_timers;

+-------------+-------------+

| NAME        | TIMER_NAME  |

+-------------+-------------+

| idle        | MICROSECOND |

| wait        | CYCLE       |

| stage       | NANOSECOND  |

| statement   | NANOSECOND  |

| transaction | NANOSECOND  |

+-------------+-------------+

Timer_name是,performance_timers中之一条龙。表示有事件类应用了哟计时器

23.9.3 性能框架实例表

23.9.3.1 cond_instances表

Cond_instance表列出了具备性能框架可以查的规范。条件是合机制,用来打招呼一个点名的事件就出了。所以一个线程等待这极的会立刻恢复工作。

当一个线程等待的事物就变化,条件名值说明线程在等待条件名。

23.9.3.2 file_instances表

当指定文件io记录点的当儿,File_instances表列出了独具性能框架能望底所有文件。如果文件在disk但是尚未让辟不见面起于file_instrances中。当文件在次磁盘中于剔除,那么file_instances中为会见去除。

23.9.3.3 mutex_instances表

Mutex_instances显示了具备可以吃性框架查看到的信号量。信号量是共机制用来维护资源。当2单线程运行需要放问相同的资源,2只线程会互相争用,一个线程获取了mutex上的吊,那么另外一个只能待上一个做到。

当任务履行得信号量,称为临界区域,区域外履还是各个的,可能发地下瓶颈问题。

表中有3个字段:

Name:记录点的名字

OBJECT_INSTANCE_BEGIN:被记录之信号量在内存中的地方。

LOCKED_BY_THREAD_ID:拥有mutex的线程id,否则为null。

对此每个记录之信号量,性能框架提供一下音讯:

·        
Setup_instruments表列出了笔录点名,以wait/synch/mutex/为前缀。

·         当有代码创建了信号量,那么就算来一行给加入到mutex_instrances表中,OBJECT_INSTANCE_BEGIN列是mutex的唯一排。

·         当一个线程视图锁定信号量,events_waits_current表为线程显示一行,说明当等候信号量,通过object_instance_begin。

·         当线程成功锁定了一个信号量:

§ 
Events_waits_current,显示等信号量就会见好

§  完成的风波会给补充加到历史表中

§ 
Mutex_instances显示信号量现在属一个thread

·         当thread unlock一个信号量,mutex_instances显示信号量现在没owner,thread_id为null。

·         当信号量对象吃销毁,对应的实行呢会见吃删除。

查看以下2只说明,可以诊断瓶颈或者死锁:

§ 
Events_waits_current,查看线程等待的信号量。

§ 
Mutex_instrances,查看其他线程的持有的信号量。

23.9.3.4 Rwlock_instances表

Rwlock_instances表列出了颇具rwlock的实例。Rwlock是一起机制用来强制在肯定规则下,在给定的轩然大波里能够访问有资源。这些资源让rwlock保护。访问使无是共享方法使无是破异艺术,如果同意不一致性访问,还足以共享排异道访。Sxlock只有以,mysql 5.7事后才会叫下,用来优化并发性。

基于访问的要求,所之乞求而无是,共享,排异,共享排异要么无授权,等待其他线程完成。

表列如下:

·          
NAME:记录点名相关的lock

·          
OBJECT_INSTANCE_BEGIN:被记录的吊在内存中之地点。

·          
WRITE_LOCKED_BY_THREAD_ID:当一个线程有一个rwlock,排他模式,WRITE_LOCKED_BY_THREAD_ID,就是锁定线程的thread_id。

·          
READ_LOCKED_BY_COUNT:当线程当前产生一个rwlock共享模式,那么read_locked_by_count增加1。只是独计数,所以找不交大线程拥有了读锁,但是足以用来查阅是否生读锁,有小读是移动的。

透过执行查询一下表明,何以知道瓶颈和死锁:

·          
Events_waits_current,查看等待哪些rwlock

·          
Rwlock_instrances,查看其他线程是否具此锁。

不得不解老线程有了write lock但是未知晓哪位线程有read lock。

23.9.3.5 socket_instance表

Socket_instancees表提供了一个实时的连活动快照。每个tcp/ip连接起一行,或者每个unix socket file连接起一行。

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

***************************

  1. 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

***************************

  1. 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

socket记录点名字格式,wait/io/socket/sql/socket_type:

1.劳务产生一个监听socket,记录点那么socket_type的值为server_tcpip_socket或者server_unix_socket``。

2.      当有一个监听socket发现一个连接,那么服务会转化到一个初的socket来管理,server_type类型为client_connection。

3.      当一个连续中断,那么行会在socket_instances中删除。

Socket_instances表类如下:

·          
EVENT_NAME: wait/io/socket/*,具体的讳来至于setup_instruments表

·          
OBJECT_INSTANCE_BEGIN:socket的唯一标记,值吗对象在内存中之价。

·          
THREAD_ID:内部线程表示。每个socket由线程管理,所以每个socket被射到一个线程。

·          
SOCKET_ID:socket内部的分配的文本句柄

·           IP:客户端ip地址

·          
PORT:客户端端口地址

·          
STATE:socket状态而无是idle要无是active。如果线程等待client的伸手,那么状态就是idle。当socket变成idle,表中的STATE也会见化IDLE,socket的记录点中断。当求出现idle中断,变成ACTIVE。Socket的记录点timing恢复。

IP:PORT组合来代表一个得力之连续。组合值被用于events_waits_xxx表的object_name,来号连接来至于哪里:

·           来至于unix域监听socket,端口是0,ip为‘’

·           对于通过unix域监听的socket,端口是0,ip为‘’

·           对于tcp/ip的监听,端口是劳务之端口,默认为3306,ip为0.0.0.0

·           对于经tcp/ip连接的客户端接口,端口无呢0,ip是客户端的ip。

23.9.4 性能框架事件等待表

事件等待表有3独:

·          
Events_waits_current:当前事件等待表

·          
Events_waits_history:历史等历史表,最近底等候事件说明

·          
Events_waits_history_long:很多轩然大波等历史的阐明。

等候历史配置

为收集等事件,启动相应的记录点和买主。

mysql>
SELECT
* FROM setup_instruments

   
-> WHERE
NAME LIKE ‘wait/io/file/innodb%’;

+————————————–+———+——-+

|
NAME                                 | ENABLED | TIMED |

+————————————–+———+——-+

|
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   |

+————————————–+———+——-+

mysql>
SELECT
* 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    |

+—————————————-+———+——-+

修改enabled和timing列:

mysql>
UPDATE
setup_instruments SET ENABLED = ‘YES’, TIMED = ‘YES’

   
-> WHERE
NAME LIKE ‘wait/io/socket/sql/%’;

Setup_consumers包含消费者对许交刚刚的轩然大波说明。这些消费者因此来过滤等事件之收集,默认为剥夺:

mysql>
SELECT
* FROM setup_consumers WHERE NAME LIKE ‘%waits%’;

+—————————+———+

|
NAME                      | ENABLED |

+—————————+———+

|
events_waits_current      | NO      |

|
events_waits_history      | NO      |

|
events_waits_history_long | NO      |

+—————————+———+

起先所有的守候事件:

mysql>
UPDATE
setup_consumers SET ENABLED = ‘YES’

   
-> WHERE
NAME LIKE ‘%waits%’;

Setup_timers表包含了一行name为wait,表示等事件之定时的单位,默认是cycle:

mysql>
SELECT
* FROM setup_timers WHERE NAME = ‘wait’;

+——+————+

|
NAME | TIMER_NAME |

+——+————+

|
wait | CYCLE      |

+——+————+

改定时单位时:

mysql>
UPDATE
setup_timers SET TIMER_NAME = ‘NANOSECOND’

   
-> WHERE
NAME = ‘wait’;

23.9.4.1 events_waits_current表

Events_waits_current表包含了目前之守候时,每个thread都产生一行显示当前thread的等候时。Events_waits_current表可以采用truncate table。

Events_waits_current表列:

·        
THREAD_ID,EVENT_ID
线程相关的波及线程当前事件号。这2个字段形成主键来标示一行。

·        
END_EVENT_ID
当事件启动,这个列为null,如果时间截止分配一个事件号。

·        
EVENT_NAME
转变事件之笔录点名。

·         SOURCE
源代码文件称包含有事件的记录点代码位置。可以帮用来检查源代码。

·        
TIMER_START,TIMER_END,TIMER_WAIT
事件的timing信息。时间单位也皮秒。TIMER_START,TIMER_END表示事件的起来与竣工。TIMER_WAIT是事件的持续时间。如果事件尚未完结TIMER_END,TIMER_WAIT为null。如果记录点的timed=no那么这3个列都是null。

·         SPINS
对信号量,是才由旋次数。如果为null,表示代码不以自旋或者自旋没有为记录。

·        
OBJECT_SCHEMA,OBJECT_NAME,OBJECT_TYPE_OBJECT_INSTANCE_BEGIN
这些列表示对象吃启动的岗位,根据目标类型不同含义不同:
对于联合对象:(cond,mutex,rwlock)

§ 
OBJECT_SCHEMA,OBJECT_NAME,OBJECT_TYPE为null

§ 
OBJECT_INSTANCE_BEGIN为同对象在内存中的地址。

对此文本io对象

§ 
OBJECT_SCHEMA为null

§  OBJECT_NAME为文件称

§  OBJECT_TYPE为file

§ 
OBJECT_INSTANCE_BEGIN为内存地址

对于socket对象

§  OBJECT_NAME为IP:PORT

§ 
OBJECT_INSTANCE_BEGIN为内存地址

对于表io对象

§ 
OBJECT_SCHEMA是表所在schema的讳

§  OBJECT_NAME表名

§  OBJECT_TYPE为table或者temporary table

§ 
OBJECT_INSTANCE_BEGIN是内存地址

OBJECT_INSTANCE_BEGIN本身是从来不意义的,除非不同之值表示不同之靶子。OBJECT_INSTANCE_BEGIN可以就此来调节。比如group by这个字段查看是否有1000单信号量,造成某些瓶颈。

·        
INDEX_NAME
运用的index名字,primary表示表底主键索引,null表示不曾索引

·        
NESTING_EVENT_ID
event_id表示挺event被嵌套

·        
NESTING_EVENT_TYPE
嵌套的风波培训,可能是以下一栽,TRANSACTION,STATEMENT,STAGE,WAIT

·        
OPERATION
行操作的类,lock,read,write中一个。

·        
NUMBER_OF_BYTES
读写操作的字节个数。对于表io等待,MySQL 5.7.5底前值为null,之后吧行数。如果值超出1,是批量io操作。MySQL执行join是nested-loop机制。性能框架可以供行数和每个表执行join准确的工夫。假设一个join查询,执行如下:

SELECT
… FROM t1 JOIN t2 ON … JOIN t3 ON …

当join操作的时候表的表行的增加减少(扇出)。如果t3的扇出超乎1,那么大多数实践获得操作就来源于于这发明。假设t1 10执,t2 20执针对许到t1如出一辙尽,t3 30尽针对应t2 1行。那么一共会来被记录的操作是:

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

为削减给记录操作,可以通过每次扫描实现集的章程(聚合t1,t2的绝无仅有值)。记录点计数减少为:

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

对于地方的场面采取条件:

§  查询访问的申基本上还是inner join的

§  查询执行不需要表内的么记录

§  查询执行不欲评估子查询访问了表。

·         FLAGS
保留

23.9.4.2 Events_waits_history表

Events_waits_history表每个线程包含了近年来N条数据。表结构和events_waits_current一尽,也可以给truncate table,N是服务启动自动装的,也足以由参数设置:
performance_schema_events_waits_history_size。

23.9.4.3 events_waits_history_long 表

Events_waits_history_long表每个线程包含了近年N条数据。表结构及events_waits_current一执行,也可以于truncate table,N是服务启动自动装的,也得以自参数设置:
performance_schema_events_waits_history_long_size。

23.9.5 性能框架Stage事件表

特性框架stage记录,是报句子执行之路,比如解析语句,打开表或者实行filesort操作。Stage关联到之了show
processlist中之线程状态。

以事件等,等待事件穿插在stage事件,stage事件穿插在谈事件,事务事件。

Stage事件配置

起步stage事件的采访,启动相应的记录点和买主。

Setup_instruments表包含以stage开头的笔录点名。这些记录点除了谈处理的音,默认是禁用的:

mysql>
SELECT
* 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/checking privileges on cached query      | NO      | NO   
|

|
stage/sql/checking query cache for query           | NO      | NO   
|

|
stage/sql/cleaning up                              | NO      | NO   
|

|
stage/sql/closing tables                           | NO      | NO   
|

|
stage/sql/Connecting to master                     | NO      | NO   
|

|
stage/sql/converting HEAP to MyISAM                | NO      | NO   
|

|
stage/sql/Copying to group table                   | NO      | NO   
|

|
stage/sql/Copying to tmp table                     | NO      | NO   
|

|
stage/sql/copy to tmp table                        | NO      | NO   
|

|
stage/sql/Creating sort index                      | NO      | NO   
|

|
stage/sql/creating table                           | NO      | NO   
|

|
stage/sql/Creating tmp table                       | NO      | NO   
|

+—————————————————-+———+——-+

修改stage事件,修改enabled和timing列:

mysql> UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES'

    -> WHERE NAME = 'stage/sql/altering table';

Setup_consumers表包含消费者只有涉嫌的事件表名。消费者可能因此来过滤收集器stage事件。Stage消费者默认禁用:

mysql> SELECT * FROM setup_consumers WHERE NAME LIKE '%stages%';

+----------------------------+---------+

| NAME                       | ENABLED |

+----------------------------+---------+

| events_stages_current      | NO      |

| events_stages_history      | NO      |

| events_stages_history_long | NO      |

+----------------------------+---------+

开行所有的stage事件:

mysql> UPDATE setup_consumers SET ENABLED = 'YES'

    -> WHERE NAME LIKE '%stages%';

Setup_timers包含name=‘stage’,说明stage事件timing:

mysql> SELECT * FROM setup_timers WHERE NAME = 'stage';

+-------+------------+

| NAME  | TIMER_NAME |

+-------+------------+

| stage | NANOSECOND |

+-------+------------+

修改timing值:

mysql>
UPDATE
setup_timers SET TIMER_NAME = ‘MICROSECOND’

   
-> WHERE
NAME = ‘stage’;

Stage事件进程信息

MySQL 5.7.5,性能架构stage事件表包含2列,每行提供stage进程标示:

·          
WORK_COMPLETED:stage工作单元完成个数。

·          
WORK_ESTIMATED:预期的stage工作单元完成个数。

如若无进度信息,每列都是null。性能框架提供一个器皿来存放在这些进度数据:

·           工作单元,是一个计量,随着实践时间的加码变死。

·          
WORK_COMPLETED,一个或者多单单元增加一涂鸦,依赖让让记录代码

·          
WORK_ESTIMATED,可以以stage司改,根据,被记录代码。

对stage事件的速度的笔录得实现以下任何表现:

·           没有进度记录点
夫是最常出现的,因为从没进度数据让提供,WORK_COMPLETED和WORKESTIMATED都为bull

·           没有受绑定记录点
只有WORK_COMPLETED列有意义,WORK_ESTIMATED列没有价值,显示为0。
打开events_stages_current表监控回,监控程序可以告诉发生微微work已经给实施,但是未懂得呀时可收,因为记录点没有提供。

·           绑定快记录点
WORK_COMPLETED和WORK_ESTIMATED列都是发含义的。
快标识符的种类适合吃已定义了形成压的操作,比如表复制记录点。通过查询events_stages_current表来监督会话,监控程序可以监督所有完成比例之stage,通过计算WORK_COMPLETED / WORK_ESTIMATED的比率。

stage/sql/copy to tmp table演示,进度标识符如何做事。在执行alter table语句,这个记录点就颇有因此,并且会实施好丰富一段时间。

23.9.5.1 events_stages_current表

Events_stages_current表包含当前stage事件,每行一个线程线程当前状态监控及之stage事件。

Events_stages_current表可以truncate
table。

表events_stages_current是events_stages_history和events_stages_history_long的基础。

Events_Stages_current列:

·        
THREAD_ID,EVENT_ID
线程相关的轩然大波以及线程当前事件号。这2单字段形成主键来标示一行。

·        
END_EVENT_ID
当事件启动,这个列为null,如果时光结束分配一个事件号。

·        
EVENT_NAME
变动事件之记录点名。

·         SOURCE
源代码文件称包含有事件的记录点代码位置。可以助用来检查源代码。

·        
TIMER_START,TIMER_END,TIMER_WAIT
事件之timing信息。时间单位吗皮秒。TIMER_START,TIMER_END表示事件之开头同终止。TIMER_WAIT是事件之持续时间。如果事件没成功TIMER_END,TIMER_WAIT也null。如果记录点的timed=no那么这3独列都是null。

·        
WORK_COMPLETED,WORK_ESTIMATED
这些列提供了stage进度信息,对于记录点已经为此来十分成这些信。WORK_COMPLETED表示有稍许办事单元已经给成功,WORK_ESTIMATED代表有些许工作单元预计的stage。

·        
NESTING_EVENT_ID
EVENT_ID nested生成的风波。嵌套的event的stage事件通常是报句事件。

·        
NESTING_EVENT_TYPE
嵌套事件类,TRANSACTION,STATEMENT,STAGE,WAIT其中一个。

23.9.5.2 events_stage_history表

Events_stages_history为每个线程保留了N个记录,具体可以经过配备参数修改:

performance_schema_events_stages_history_size

23.9.5.3 events_stage_history_long表

Events_stages_history_long也每个线程保留了N个记录,具体可由此配备参数修改:

performance_schema_events_stages_history_long_size

23.9.6 性能框架语句事件表明

性框架记录点语句执行。语句事件发生在胜级别之风波,等待事件嵌套在stage事件中,stage事件嵌套在言语事件中,语句事件嵌套在事情事件备受。

言语事件配置

Setup_instruments表包含记录点,以statement前缀的记录点。这些记录点的默认值可以用语句:

mysql> SELECT * FROM setup_instruments WHERE NAME LIKE 'statement/%';

好经以下语句修改:

mysql> UPDATE setup_instruments SET ENABLED = 'NO'

    -> WHERE NAME LIKE 'statement/com/%';

翻开和改动timer:

mysql>
SELECT
* FROM setup_timers WHERE NAME = ‘statement’;

+———–+————+

|
NAME      | TIMER_NAME |

+———–+————+

|
statement | NANOSECOND |

+———–+————+

修改timer:

mysql>
UPDATE
setup_timers SET TIMER_NAME = ‘MICROSECOND’

   
-> WHERE
NAME = ‘statement’;

 

告句监视

语词监视开始受为呼吁的移位届拥有移动已。也就是是劳务遭遇客户端的第一只保险,到完成回响应。在MySQL
5.7.2事先,语句只见面是高等别的,比如在储存过程或者子查询不见面给分离出来。

末段记录点名和劳务令和sql语句关于:

·           关联到COM_xxx定义在mysql_com.h头文件与于sql/sql_parse.cc中处理,比如COM_PING和COM_QUIT,那么记录点名以statement/com开头,比如statement/com/ping和statement/com/ping。

·           SQL语句是用文件表示的。那么相关的一声令下执行以statement/sql开头,比如statement/sql/delete和statement/sql/select。

片记录点名表示非常的错误处理:

·          
Statement/com/error,记录了服务收集至之匪绑定的消息。无法判定从客户端发送至服务端的下令。

·          
Statement/sql/error,记录了sql语句分析错误。用来诊断查询发送到客户端的百般。一个询问分析错误与查询执行错误不同

恳请可以经过以下水道得到:

·           一个限令或者语句从客户端取并发送

·           在replication slave,语句字符串从relay log读取。

·           从event scheduler获取事件。

吁的事无巨细原来是免明白的,并且性能框架从央的次第获取特定的记录点名。

于客户端收集之呼吁:

1.        当服务意识一个新的承保在socket级别,一个初的的告诉句以抽象的笔录点名statement/abstract/new_packet开始。

2.        当服务读取包序号,获取接受之呼吁类型,性能框架获取记录点名。比如,请求是COM_PING包,那么记录点名会变成statement/com/ping。如果请是COM_QUERY包,知道是一个sql语句,但是非晓具体的类。这个时刻会为一个泛的记录点名statement/abstract/query。

3.        如果要的口舌,文本既读入到分析器。分析以后,那么准确的言语类型已清楚了,如果要是一个插入语句,性能框架会还定位记录点名statement/abstract/Query
to statement/sql/insert。

 

对自复制的relay log上宣读取语词:

1.        语句以relay log中凡以文件存储的。没有网络协议,所以statement/abstract
/new_packet不见面让运用,而是用statement/abstract/realy_log。

2.        当语句子被解析,准确之语句类型为查出。比如insert语句,那么性能框架会再次寻找记录点名,statement/abstract/Query
to statement/sql/insert。

方介绍的,只是冲语句的复制,对于因行的复制,订阅表行处理好让记录,但是relay
log中的行事件描述语句的并无会见油然而生。

 

对于自事件调度器来之乞求:

事件实施的记录点名为statement/scheduler/event。

事件体重的事件实施记录点名使用statement/sql/*,不适用其他抽象记录点名。事件是一个仓储过程,并且存储过程是预编译在内存中的。那么在实践时就非见面有分析,但是项目在尽时虽知道了。

在波体内的言辞都是子句。比如一个风波实施了一个insert语句,执行的事件是上面。记录点使用statement/scheduler/event,并且insert是下属,使用statement/sql/insert记录点。

这样不单单是要启动statement/sql/*记录点,还要启动statement/abstract/*记录点。

以前的5.7本的,抽象记录点名用其他记录点代替的:

·          
Statement/abstract/new_packet之前为statement/com/

·          
Statement/abstract/query之前为statement/com/Query

·          
Statement/abstract/relay_log之前为statement/rpl/relay_log

23.9.7 性能框架事务表

性能框架事务记录点。在波级别,等待事件嵌套stage事件,stage事件嵌套语句事件,语句事件嵌套事务事件。

 

政工事件配置

Setup_instruments包含的transaction的记录点:

mysql>
SELECT
* FROM setup_instruments WHERE NAME = ‘transaction’;

+————-+———+——-+

|
NAME        | ENABLED | TIMED |

+————-+———+——-+

|
transaction | NO      | NO    |

+————-+———+——-+

起先收集工作事件:

mysql>
UPDATE
setup_instruments SET ENABLED = ‘YES’, TIMED = ‘YES’

   
-> WHERE
NAME = ‘transaction’;

Setup_consumers表包含transaction的消费者:

mysql>
SELECT
* FROM setup_consumers WHERE NAME LIKE ‘%transactions%’;

+———————————-+———+

|
NAME                             | ENABLED |

+———————————-+———+

|
events_transactions_current      | NO      |

|
events_transactions_history      | NO      |

|
events_transactions_history_long | NO      |

+———————————-+———+

启航消费者:

mysql>
UPDATE
setup_consumers SET ENABLED = ‘YES’

   
-> WHERE
NAME LIKE ‘%transactions%’;

设置相关记录点:

mysql>
SELECT
* FROM setup_timers WHERE NAME = ‘transaction’;

+————-+————+

|
NAME        | TIMER_NAME |

+————-+————+

|
transaction | NANOSECOND |

+————-+————+

修改timer_name的值:

mysql>
UPDATE
setup_timers SET TIMER_NAME = ‘MICROSECOND’

   
-> WHERE
NAME = ‘transaction’;

 

事务绑定

于MySQL Server,使用以下语句显示启动工作:

START
TRANSACTION | BEGIN | XA START | XA BEGIN

工作也得以隐式启动,当autocommit系统变量启动。当autocommit禁用,在启动新工作钱如果展示的了断上面一个事务。

COMMIT
| ROLLBACK | XA COMMIT | XA ROLLBACK

履行DDL语句,事务会隐式提交

性能框架定义的业务绑定和服务之良相像。事务的开行和说吗同劳动之事体状态相当:

·           对于显示启动之业务,事务events在start transaction后开行。

·           对于隐式启动之工作,事务事件于率先个报告句执行的下启动。

·           对于其他业务,当行commit,rollback事务了。

神秘的不同点:

·           性能框架中之业务事件,没有了含语句事件仍START
TRANSACTION,COMMIT,ROLLBACK语句。

·           语词如果运行在非实物引擎,那么连的政工状态不见面影响。

 

业务记录点

3只概念之业务属性:

·           访问模式(read only,read write)

·           隔离级别

·           隐式或者显示

为了减少作业记录点并且保证收集工作数据是就的,有含义之结果,所有事务都来看模式,隔离级别,自动提交模式。

业务事件说明动3列来ACCESS_MODE,ISOLATION_LEVEL,AUTOCOMMIT记录。

事情记录点消费可以出好多种方式减少,比如根据用户,账号,host,thread启动或禁用事务减了碰。

 

线程和嵌套事件

业务事件的顶头上司事件是初始化事务之轩然大波。对于显示事务启动,包含START_TRANSACTION和commit and china,如果是隐式事务,第一独告知句启动工作。

展示的结工作,COMMIT,ROLLBACK,或者DDL语句,隐式的付出业务。

 

事情及仓储过程

政工以及储存过程事件涉及如下:

·           存储过程
仓储过程操作独立的政工,一个储存过程得启动一个业务,并且一个业务可以于仓储过程被启动与了。如果当一个政工中调用,一个储存过程可以告诉句强制提交业务并且启动一个新的作业。

·           存储函数
储存函数可以限制显示或者隐式的事体提交和回滚。

·           触发器
触发器活动是喻词的活动看相关的发明,所以触发器事件之顶头上司事件激活它。

·           调度事件
事件体的语句调度事件闹一个新连。

 

事务和savepoint

Savepoint语句以单身的言语事件于记录。语句事件包括SAVEPOINT,ROLLBACK
TO SAVEPOINT和RELEASE SAVEPOINT语句。

 

业务和错 事情中的失实以及警示被记录在讲话事件受到,但是不在相关的业务事件。

23.9.8 性能框架连接表

性框架提供了连接的统计信息。当客户端连接,在一个特定的用户称及host下。性能框架为每个账号跟踪连接。

·        
Accounts:每个客户端账号的连接统计信息。

·         Hosts:每个客户端hostname 的连统计信息。

·         Users:每个客户端用户名的连日统计信息。

账号这里的意思是用户增长host。连接表有CURRENT_CONNECTIONS和TOTAL_CONNECTIONS列跟踪所有的连接。Accounts表有USER和HOST列跟踪用户与host。Users和hosts表出USER和HOST列,跟踪用户或host。

要客户端名user1,user2从hosta,hostb连接过来。性能框架跟踪连接入选:

·        
Accounts会有4条记录,user1/hosta,user1/hostb,user2/hosta,user2/host2.

·         Users表有2条记录,user1,user2

·         Host表有2条记录,hosta,hostb

当客户端连接,连接表中如果无存在这样的用户或host,那么就是长一行否则即修改CURRENT_CONNECTIONS和TOTAL_CONNECTIONS列。

当客户端断开连接,性能框架减少current_connecitons列。

性框架为计数内部线程和用户会话线程验证错误。对应的user和host为null。

每个连表都可以truncate:

·         行如果是CURRENT_CONNECTIONS=0的虽去

·         如果>0,TOTAL_CONNECTIONS设置为CURRENT_CONNECTIONS。

·         连接合计表依赖让连接表的值会被设为0.

23.9.9 性能框架连接属性表

具体看:

http://dev.mysql.com/doc/refman/5.7/en/performance-schema-connection-attribute-tables.html

23.9.10 性能框架用户变量表

具体看:

http://dev.mysql.com/doc/refman/5.7/en/performance-schema-user-variable-tables.html

23.9.11 性能框架复制表

MySQL 5.7.2,性能框架提供了关于复制信息之发明。和show slave
status的音讯类:

·         Show slave
status输出可以阅读进行检查,但是非克为此来编程使用。

·         查询结果可以保留至表中,用于分析,设置变量,或者在储存过程及采用。

·         复制表提供了再度好之诊断信息,对于多线程slave操作,show slave status使用last_SQL_Errorno和last_sql_error字段报告富有的协调器和做事线程的错。所以只有最近之左才能够看得出。复制表会为每个线程上之失实保存信息不见面丢掉。

·         每个工作线程的新型的工作在以复制表是可见的。但是show_slave_status。不可见。

·         开发熟悉的性框架接口可以扩大复制表提供再多的音讯。

复制表描述

特性框架提供一下以及复制有关的阐明:

·         关于Slave连接到master的总是信息表:

§ 
Replication_connection_configuration:配置连接到master的参数。

§ 
Replication_connection_status:当前总是到master的状态。

·         关于slave事务应用之阐发

§ 
replication_applier_configuration:slave中工作应用之配置信息。

§ 
replication_applier_status:当前事务应用之状态。

·         关于指定线程应用由master获取工作并推行的音信:

§ 
Replication_applier_status_by_coordinator:applier线程状态,之前叫replication_execute_status_by_coordinator。对于发出差不多个work thread的复制有多单work thread和一个调和线程,对于单线程的之表为空。

§ 
Replication_applier_status_by_worker:工作线程应用状态。同齐单线程复制表为空。

·         包含复制组成员信息的说明:

§ 
Replication_group_members:提供网络及组成员状态。

§ 
Replication_group_member_status:提供组成员的统计信息以及涉企的政工。

复制表生命周期

属性框架在偏下状态下写副复制表:

·           在执行change master to之前表为空。

·           在实践change master to之后。配置阐述得当表上发现。如果是时节没有运动之slave
线程,那么thread_id列为null,serivce_state的状态呢off。

·           Start
slave之后,没有thread_id字段不呢空。线程为空或者活动service_status状态为on。线程连接到master
server,如果连起起只connecting值。

·           Stop
slave之后,thread_id为null,并且service_State列值为off。

·           Stop
slave或者thread碰到错误,表信息会受保存。

·          
Replication_applier_Status_by_worker表只有当slave操作以差不多线程模式下为非空。如果slave_parallel_workers变量大于0,那么start
slave之后,行数和线程个数一样多。

SHOW SLAVE STATUS不再复制表中的消息

Show slave status的信及复制表中的信不同,因为这些发明要是面向GTID的复制。不是冲文件称和位置:

·           以下字段关于文件称及岗位的尚未保留:

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,没有给保存:

Master_Server_Id

Replicate_Ignore_Server_Ids

·          
Skip_counter列依据事件个数,不是gtid没有被保留。

·           错误列是last_sql_errno,last_sql_error的别名,因此不为保留

Last_Errno

Last_Error

在性框架中,replication_applier_status_by_coodinator和表replication _applier_status_by_worker中的last_error_number和last_error_message列保存了错误信息。

·           命令行过滤操作的消息不受保存:

Replicate_Do_DB

Replicate_Ignore_DB

Replicate_Do_Table

Replicate_Ignore_Table

Replicate_Wild_Do_Table

Replicate_Wild_Ignore_Table

·          
Slave_io_State和slave_sql_running_state列没有保留。如果需要可以通过thread_id关联上perocesslist表获取表中的status值。

·          
Executed_gtid_set字段可以显示大量底文。和性能框架表中显示已经于slave应用的事务的GTID。已经给实践之GTID可以经gtid_executed系统变量获取。

·          
Seconds_behind_master和relay_log_spae用来用设叫控制的状态不保留。

状态变量移动及了复制表

自mysql 5.7.5,以下状态让挪动及了性框架复制表:

Slave_retried_transactions

Slave_last_heartbeat

Slave_received_heartbeats

Slave_heartbeat_period

Slave_running

这些变量用于单源复制,因为只能反映默认源复制。当起差不多只复制源,可以使性能复制表,汇报每个复制渠道的状态。

多源复制

性框架表的首先排列是channel_name.可以视每个复制源。

23.9.11.1 replication_connection_configure表

表明显示了连年至slave服务之总是配置。参数为封存在表中,在change
master执行之时光会叫改动。

replication_connection_configuration表包含以下列:

·          
CHANNEL_NAME:复制源名。

·          
HOST:master的host名。

·          
PORT:master的端口

·          
USER:连接用户

·          
NETWORK_INTERFACE:slave绑定的network接口。

·          
AUTO_POSITION:如果由定定位被采取了便是1,否则是0

·          
SSL_ALLOWED, SSL_CA_FILE, SSL_CA_PATH,
SSL_CERTIFICATE, SSL_CIPHER, SSL_KEY,
SSL_VERIFY_SERVER_CERTIFICATE, SSL_CRL_FILE, SSL_CRL_PATH
这些列显示了slave连接到master的SSL的参数SSL_ALLOWED的价如下:

§   Yes,如果SSL连接到master被允许。

§   No,如果SSL连接到master不让允许。

§   Ignored,如果SSL被允许,但是slave不支持SSL。

Change master to选项还闹外ssl选项:MASTER_SSL_CA, MASTER_SSL_CAPATH,
MASTER_SSL_CERT, MASTER_SSL_CIPHER, MASTER_SSL_CRL,
MASTER_SSL_CRLPATH, MASTER_SSL_KEY,
MASTER_SSL_VERIFY_SERVER_CERT。

·          
CONNECTION_RETRY_INTERVAL:重试的秒数。

·          
CONNECTION_RETRY_COUNT:失误连连之后重试的次数。

·          
HEARTBEAT_INTERVAL:复制心跳间隔。

23.9.11.2 replication_connection_status

发明保存了io线程的状态,io线程连接到master服务获得binary log信息。

Replication_connection_status相关列:

·          
CHANNEL_NAME:来源名。

·          
GOURP_NAME:保留

·          
SOURCE_UUID:master的server_uuid

·          
THREAD_ID:io 线程id

·          
SERVICE_STATE:服务状态

·          
RECEIVED_TRANSACTION_SET:GTID集合反应都深受slave收到的GTID。

·          
LAST_ERROR_NUMBER,LAST_ERROR_MESSAGE:错误好与错误信息。

·          
LAST_ERROR_TIMESTAMP:错误的波格式为YYMMDD HH:MM:SS。

·          
LAST_HEARTBEAT_TIMESTAMP:最近同等不好中心跳事件的事件。

·          
COUNT_RECEIVED_HEARTBEATS:收到的心跳次数。

23.9.11.3 replication_applier_configure

是表形了震慑工作应用的部署参数。参数保存在说明得透过change
master to修改。

Replication_applier_configure表有坐下列:

·          
CHANNEL_NAME:复制来源名。

·          
DIESIRED_DELAY:master到slave的延迟。

23.9.11.4 replication_applier_status

发明保存了slave通常事务执行的状态。

replication_aplier_status列名:

·          
CHANNEL_NAME:复制来源名。

·          
SERVICE_STATE:显示on表示复制渠道活动要空闲,如果也off表示用线程没有动。

·          
REMAINING_DELAY:如果slave等待DESIRED_DELAY直到master应用事件。列显示剩下的秒数。

·          
COUNT_TRANSACTIONS_RETRIES:显示了sql thread应用工作错误,导致重试的次数。

23.9.11.5 replication_applier_status_by_coordinator

于多线程的slave,slave使用多个干活线程和一个和谐线程,协调线程用来管理工作线程,表形了和谐线程的状态。如果是单线程slave,表为空。

Replication_applier_status_by_coordinator列:

·          
CHANNEL_NAME:复制来源名。

·          
THREAD_ID:SQL/协调线程id。

·          
LAST_ERROR_NUMBER,LAST_ERROR_MESSAGE:最后一蹩脚错误号与错误信息。

·          
LAST_ERROR_TIMESTRAMP:时间戳格式为YYMMDD HH:MM:SS。

23.9.11.6 replication_applier_statys_by_worker

对于多线程的slave,slave使用多只工作线程和一个协调线程,协调线程用来管理工作线程,表形了和谐线程的状态。如果是单线程slave,表为空。

Replication_applier_status_by_worker:

·          
CHANNEL_NAME:复制来源名。

·          
WORKER_ID:worker标识符。Stop
slave之后线程id会变成null,workerid会保留。

·          
THREAD_ID:线程id

·          
SERVICE_STATE:on,表示活动或者空闲,off表示不设有。

·           表示worker发现的风行的政工,如果gtid_mode=off列的值为ANONYMOUS。如果为on:

§   如果没事情让执行,那么就是是空。

§   当有一个政工让实践了排设置成gtid_next。

§   GTID会被封存,知道下一个业务运行就。

§   当下一个GTID被外线程获取,从gtid_next上获得。

·          
LAST_ERROR_NUMBER,LAST_ERROR_MESSAGE:最后一差错误号与错误信息。

·          
LAST_ERROR_TIMESTRAMP:时间戳格式为YYMMDD HH:MM:SS。

23.9.11.7 replication_group_members

表保存了网和复制成员组的状态信息。Replication_group_members列:

·          
CHANNEL_NAME:复制来源名。

·          
MEMBER_ID:member标示,和uuid一样。

·          
MEMBER_HOST:host地址或者主机名。

·          
MEMBER_PORT:端口。

·          
MEMBER_STATE:

§   OFFLINE:group replication插件都安装可并未启动。

§   RECOVERING:服务都进入到一个group,正在获取数据。

§   ONLINE:成员以都效状态。

23.9.11.8 replication_group_member_status

申保存了replication group成员的状态,replication_group_member_status:

·          
CHANNEL_NAME:复制来源名。

·          
VIEW_ID:该group的眼前之view标示符。

·          
MEMBER_ID:member标示,和uuid一样。

·          
COUNT_TRANSACTIONS_IN_QUEUE:pending事务的个数。

·          
COUNT_TRANSACTIONS_CHECKED:已经于成员证实的政工个数。

·          
COUNT_CONFLICTS_DETECTED:冲突发现个数。

·          
COUNT_TRANSACTIONS_VALIDATING:事务可以实行检查,但是没有于回收的个数。

·          
TRANSACTIONS_COMMITTED_ALL_MEMBERS:固化的group事务集合。

·          
LAST_CONFLICT_FREE_TRANSACTION:最后一个尚无撞的被证明的事体。

23.9.12 性能框架锁相关表

23.9.12.1 metadata_locks

性能框架将长数据锁通过metadata_locks显示。显示一下音:

·         锁已经于分配

·         锁被求而没有给分配。

·         锁请求而于特别锁kill或者锁等待超时而让取消。

这些消息可以了解元数据锁和对话之间的干。可以查阅等待的沿,也可查看已经获的吊。

Metadata_locks表只念,不可知写入。默认是自动大小的,也得经启动参数配置高低:performance_schema_max_metadata_locks。

申默认是让剥夺的,拖了设置setup_instruments的/locl/metadata/sql/mdl来启动。

特性框架保护内容,使用lock_status表示锁之状态:

·         当元数据锁给呼吁又立即获得,行的状态的是GRANTED。

·         当元数据锁被求而从未即时得,行之状态呢pending。

·         当之前要的处女数据锁得了,行之状态改也granted。

·         当元数据锁给放,行于删。

·         当pending的锁请求被死锁发现器取消,状态改也victim。

·         当pending的锁超时,状态变为pending to timeout。

·         当分配的锁或pending的锁给kill,状态变为killed。

·         当VICTIM,TIMEOUT,KILLED被通报后行会被去除。

·        
PRE_ACQUIRE_NOTIFY,POST_RELEASE_NOTIFY状态,当得锁或者释放锁经常,lock子系统通报所在的仓储引擎的状态。

Metadata_locks列:

·        
OBJECT_TYPE:可以是这些价值的里一个. GLOBAL, SCHEMA, TABLE,
FUNCTION, PROCEDURE, TRIGGER (currently unused), EVENT, COMMIT, USER
LEVEL LOCK, TABLESPACE, LOCKING SERVICE。
若值吗USER LEVEL LOCK表示于get_lock()获取锁,如果是LOCKING SERVICE表示用lock service获取说。

·        
OBJECT_SCHEMA:对象所于的schema

·        
OBJECT_NAME:对象名

·        
OBJECT_INSTANCE_BEGIN:记录点对象在内存中的地点。

·        
LOCK_TYPE:锁之档次,INTENTION_EXCLUSIVE, SHARED,
SHARED_HIGH_PRIO, SHARED_READ, SHARED_WRITE, SHARED_UPGRADABLE,
SHARED_NO_WRITE, SHARED_NO_READ_WRITE, or EXCLUSIVE.

·        
LOCK_DURATION:lock持续的限期。可以是这些值STATEMENT, TRANSACTION,
EXPLICIT. STATEMENT 和TRANSACTION从言语或者工作的开头直到谈或者业务之收尾。

·        
LOCK_STATUS:锁之状态,PENDING,
GRANTED, VICTIM, TIMEOUT, KILLED, PRE_ACQUIRE_NOTIFY,
POST_RELEASE_NOTIFY.

·        
SOUCE:源代码文件中之文书称及岗位。

·        
OWNER_THREAD_ID:请求元数据的线程。

·        
OWNER_EVENT_ID:请求锁的事件id。

23.9.12.2 table_handles

通过表table_handles返回表锁信息。Table_handle显示了每个打开表的handle的锁信息。那个表被辟了,如何为锁定的,是何许人也线程锁之。

Table_handles是光读表,不克改,表列如下:

·        
OBJECT_TYPE:被table handle打开的表明。

·        
OBJECT_SCHEMA:表所在的schema。

·        
OBJECT_NAME:记录点对象名。

·        
OBJECT_INSTANCE_BEGIN:记录点对象在内存中的地点。

·        
OWNER_THREAD_ID:请求元数据的线程。

·        
OWNER_EVENT_ID:请求锁的波id。

·        
INTERNAL_LOCK:SQL级别下的表锁。值如下: READ, READ WITH SHARED
LOCKS, READ HIGH PRIORITY, READ NO INSERT, WRITE ALLOW WRITE, WRITE
CONCURRENT INSERT, WRITE LOW PRIORITY, WRITE。

·        
EXTERNAL_LOCK:存储引擎级别下的表锁,READ EXTERNAL ,WRITE
EXTERNAL

 

23.9.13 性能框架体系变量表

MySQL维护了许多系变量,系统变量在这些表是可用的:

·          
Global_variables:全局系统变量。如果应用程序只要全局值好使用这表。

·          
Session_variables:当前对话的体系变量。还闹没发出session变量部分的global变量

·          
Variables_by_thread:每个会话的系变量。

这些会话级别之变量只含了运动会话的变量。这些发明不支持truncate
table。

Global_variablees和session_variables表有这些列:

·          
VARIABLES_NAME:变量名

·          
VARIABLES_VALUE:变量的价。

Variables_by_thread的列:

·          
Thread_id:线程id

·          
VARIABLES_NAME:变量名

·          
VARIABLES_VALUE:变量的值。

Variables_by_thread表包含了后大线程的系变量信息。如果无是具的线程记录,那么表内有些行会小时。这个时Performance_schema_thread_instance_lost状态变量大于0 。

23.9.14 性能框架体系状态变量表

跟体系变量表类似,具体看:
http://dev.mysql.com/doc/refman/5.7/en/performance-schema-status-variable-tables.html

23.9.15 性能框架统计表

伺机事件统计表:

·          
Events_waits_summary_global_by_event_name:等待事件因每个事件进展商议。

·          
Events_waits_summary_by_instance:等待事件因每个instance进行统计。

·          
Events_waits_summary_by_thread_by_event_name:根据线程和事件名合计的发明。

Stage统计表:

·          
Events_stages_summary_by_thread_by_event_name:stage等待与线程id统计的表明。

·          
Events_stages_summary_global_by_eevnt_name:stage等待被每个事件称为之统计表。

告诉句统计表:

·          
Events_statements_summary_by_digest:每个schema和digest后的统计表。

·          
Events_statements_summary_by_thread_by_event_name:语句事件称为以及线程的统计表。

·          
Events_statements_summary_global_by_event_name:每个语句事件称为的统计表。

·          
Events_statements_summary_by_program:每个存储程序的统计(存储过程以及存储函数)。

·          
Prepared_statements_instances:预备的语实例和统计信息。

作业统计表:

·          
Events_transactions_summary_by_account_by_event_name:每个账号发起的波统计。

·          
Events_transactions_summary_by_host_by_event_name:每个host发起的事情事件统计。

·          
Events_transactions_summary_by_thread_by_event_name:每个线程发起的事体事件统计。

·          
Events_transactions_summary_by_user_by_event_name:每个用户发起的工作事件统计。

·          
Events_transactions_summary_global_by_event_name:事务事件称为统计。

对象等统计:

·          
Objects_summary_global_by_type:对象合计。

文件IO统计:

·          
File_summary_by_event_name:合计拥有文件io事件称为。

·          
File_summary_by_instance:每个文件实例的协商。

说明IO和锁等待统计:

·          
Table_io_waits_summary_by_index_usage:每个有的表io等待。

·          
Table_io_waits_summary_by_table:每个表底io等待。

·          
Table_io_waits_summary_by_table:每个表的锁等待。

接连统计:

·          
Events_waits_summary_by_account_by_event_name:每个账号发起的等候事件统计。

·          
Events_waits_summary_by_user_by_event_name:每个用户发起的等候事件统计。

·          
Events_waits_summary_by_host_by_event_name:每个host发起的等事件合计。

·          
Events_stages_summary_by_account_by_event_name:每个账号stage事件统计。

·          
Events_stages_summary_by_user_by_event_nam:每个用户发起的stage事件统计。

·          
Events_stages_summary_by_ host_by_event_name:每个host发起的stage事件合计。

·          
Events_statements_summary_by_digest:每个schema下的装有digest。

·          
Events_statements_summary_account_by_event_name:每个账号发起的讲话事件。

·          
Events_statements_summary_by_user_by_event_name:每个用户发起的话语事件。

·          
Events_statements_summary_host_by_event_name:每个host发起的口舌事件。

Socket统计:

·          
Socket_summary_by_instance:每个实例的socket等待和io合计。

·          
Socket_summary_by_event_name:socket等待和io合计。

内存统计:

·          
Memory_summary_global_by_event_name:内存操作事件合计。

·          
Memory_summary_by_thead_by_event_name:每个线程内存操作合计。

·          
Memory_summary_by_account_by_event_name:每个账号内存操作合计。

·          
Memory_summary_by_user_by_event_name:每个用户内存操作合计。

·          
Memory_summary_by_host_by_event_name:每个host内存操作协议。

状态变量统计:

·          
Status_by_account:状态变量账号合计。

·          
Status_by_host:状态变量host合计

·          
Status_by_user:状态变量用户协商

23.9.16 性能框架其他表

除开上面你的阐发还有3个说明:

·          
Host_cache:内部host cache信息。

·          
Performance_timers:事件可用定时器。

·          
Threads:服务之线程表。

23.10 性能框架选项和变量

具体看:

http://dev.mysql.com/doc/refman/5.7/en/performance-schema-option-variable-reference.html

23.11 性能框架命令选项

具体看:

http://dev.mysql.com/doc/refman/5.7/en/performance-schema-options.html

 

23.12 性能框架体系变量

具体看:

http://dev.mysql.com/doc/refman/5.7/en/performance-schema-system-variables.html

23.13 性能框架状态变量

具体看:

http://dev.mysql.com/doc/refman/5.7/en/performance-schema-status-variables.html

23.14 性能框架内存分配模型

每当mysql 5.7.6事先,性能框架下以下内存分配模型:

·         所有的内存在启动时分配。

·         服务操作的当儿不分红内存。

·         服务操作的时不放内存。

·         在劳务关闭的下释放内存。

行使这模型,性能框架会分配大量底内存,除非显示的部署。Mysql
5.7.6之后的分红模型:

·         可以于劳务启动之当儿分配。

·         可以以服务操作的时光额外分配。

·         在劳动操作的上不放。

·         在劳务关闭的时段释放内存。

如此好依据负荷来调整内存以,不是有血有肉配置。

来一部分性框架配置参数是半自动分配,也可手动分配:

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,默认,参数是机动配置的。

§  初始对应的中buffer为空,没有内存。

§  当性能框架初步收集数据,没存被分配到想使的buffer。buffer大小没有上限,随着负荷上升上涨。

·         如果设置为0:

§  初始内部buffer为空,也无见面分配内存。

·         如果安的N>0:

§  对象的中间buffer为空,并且不分配内存。

§  当数据开始搜集,内存开始分配,直到安的大大小小。

§  一旦buffer大小到达N,内存就不再分配。性能框架收集的数目会少,对应之状态变量的lost
instance会增加。

以查看性能框架下了小内存,检查记录点。性能框架收集了每个buffer的内存以信息。这样可跟踪每个buffer的内存以状态。记录点,memory/performance
_schema/。因为这些buffer是全局的,所以仅以memory_summary_global_by_event_
name上显得。查询如下:

SELECT
* FROM memory_summary_global_by_event_name WHERE EVENT_NAME LIKE
‘memory/performance_schema/%’;

23.15 性能框架和

具体看:

http://dev.mysql.com/doc/refman/5.7/en/performance-schema-and-plugins.html

23.16 使用性能框架诊断

性能框架可以给dba来举行有性调整,比如一个重新出现的性问题:

1.运行用例

2.使用性能框架表,分析从之习性问题。分析严重依赖让post过滤。

3.题材区域曾经划出,禁用对应的记录点。比如使条分缕析出与文书io不相关,禁用io的记录点。

4.重复 步骤1-3,这样好削减干扰找有真正的问题。

5.尽人皆知了性瓶颈的来头:

§  调整服务参数

§  调整查询。

§  调整数据库结构

§  调整代码。

6.又步骤1,查看对性能的震慑。

当性质调优的上,mutex_instances.locked_by_thread_id,rwlock_instances.
write_locked_by_thread_id列十分关键。比如:

1.线程1,在伺机一个信号量。

2.好使用以下语句查看等待的信号量:

SELECT
* FROM events_waits_current WHERE THREAD_ID = thread_1;

3.然晚翻看那个线程持有着是信号量:

SELECT
* FROM mutex_instances WHERE OBJECT_INSTANCE_BEGIN = mutex_A;

4.查看线程2于举行啊:

SELECT
* FROM events_waits_current WHERE THREAD_ID = thread_2;

23.17 迁移至性框架体系和状态变量表

Information_schema有说明包含了网及状态变量信息,MySQL 5.7.6从此,性能框架为包含了系统变量和状态变量信息。性能框架的表会取代information_schema上的表。

于mysql 5.6查看状态变量和系统变量来自于:

SHOW
VARIABLES
SHOW STATUS

 

INFORMATION_SCHEMA.GLOBAL_VARIABLES
INFORMATION_SCHEMA.SESSION_VARIABLES

INFORMATION_SCHEMA.GLOBAL_STATUS
INFORMATION_SCHEMA.SESSION_STATUS

Mysql 5.7.6,性能框架为隐含了系统变量和状态变量:

performance_schema.global_variables
performance_schema.session_variables
performance_schema.variables_by_thread

performance_schema.global_status
performance_schema.session_status
performance_schema.status_by_thread
performance_schema.status_by_account
performance_schema.status_by_host
performance_schema.status_by_user

MySQL 5.7.6增加了show_compatibility_56系统变量,如果为on:

·         当从information_schema中输出,会面世警示。

·         在mysql 5.7.6,使用show的where语句就会警告。MySQL 5.7.8之后就非会见。

当变量为off,不启动兼容模式:

·         搜索information_schema表会报错。

·         Show语句子输出的多少来至于性能框架表。

·         这些slave_XXX的状态变量不可用:

Slave_heartbeat_period
Slave_last_heartbeat
Slave_received_heartbeats
Slave_retried_transactions
Slave_running

       应该于性能框架的复制相关的表中获取数据。

 

搬和权杖

走访性能框架中的网变量和状态变量需要select权限。如果show_compatibility_56啊off,那么show
variables和show status也亟需select权限,如果兼容性关闭,这些报告句输出来至于性能框架的global_variables,session_variables,global_status,
session_status表。

当mysql 5.7.9,这些发明在性矿建中访问不欲select权限。对应之show variables和show status也未待权限。

从此以后的公布,information_schema变量表和show_compatibility_56会晤给去除,show输出基于性框架表。

 

 

相关文章