关于数据库对象的扩展属性,事件记录

原标题:数据库对象事件与品质计算 | performance_schema全方位介绍(五)

原题目:事件总结 | performance_schema全方位介绍(四)

原标题:事件记录 | performance_schema全方位介绍(三)

前日有人问有没有法子查看表的诠释,或询问所有表的讲明。那里所说的表或表字段等的笺注,其实是数据库对象的伸张属性。在MSSQL中,协理把有些注释性的始末放到数据库或数据库对象中,增强可读性,有助于未来的保管和护卫工作。伸张属性的内容可以经过SSMS添加、修改或删除,也得以透过系统视图查询,通过实践相关的存储进度来保安。

图片 1

图片 2

图片 3

成立一张测试表:

上一篇 《事件计算 |
performance_schema全方位介绍》详细介绍了performance_schema的风云总结表,但那几个计算数据粒度太粗,仅仅按照事件的5大品类+用户、线程等维度举行分拣统计,但偶尔大家要求从更细粒度的维度举办分拣总计,例如:某个表的IO花费多少、锁花费多少、以及用户连接的部分性质总结音讯等。此时就必要查阅数据库对象事件总计表与特性总结表了。今天将率领我们一齐踏上密密麻麻第五篇的征程(全系共7个篇章),本期将为大家无微不至授课performance_schema中指标事件统计表与特性计算表。上面,请随行大家一并起来performance_schema系统的就学之旅吧~

罗小波·沃趣科学和技术尖端数据库技术专家

导语

IF OBJECT_ID(N'T8') IS NOT NULL
BEGIN
    DROP TABLE T8
END
GO

CREATE TABLE T8 (
    id INT NOT NULL,
    name NVARCHAR(100)
)
GO

友情提醒:下文中的总结表中大部字段含义与上一篇
《事件计算 | performance_schema全方位介绍》
中关系的计算表字段含义相同,下文中不再赘述。别的,由于一些统计表中的记录内容过长,限于篇幅会不难部分文件,如有必要请自行安装MySQL
5.7.11上述版本跟随本文举行同步操作查看。

出品:沃趣科学和技术

在上一篇 《配置详解 |
performance_schema全方位介绍》中,大家详细介绍了performance_schema的布局表,持之以恒读完的是真爱,也恭喜我们翻过了一座火焰山。相信有无数人读完之后,已经急不可待的想要触机便发了,前日将率领大家齐声踏上铺天盖地第三篇的征途(全系共6个篇章),在这一期里,大家将为大家无微不至授课performance_schema中事件原本记录表。上面,请随行我们一块起来performance_schema系统的就学之旅吧。

code-1

01

IT从业多年,历任运维工程师、高级运维工程师、运维主管、数据库工程师,曾出席版本公布连串、轻量级监控系列、运维管理平台、数据库管理平台的安排性与编制,熟稔MySQL连串布局,Innodb存储引擎,喜好专研开源技术,追求一帆风顺。

等候事件表

 

数据库对象计算表

| 导语

司空见惯,大家在遇见品质瓶颈时,即使别的的办法难以找出品质瓶颈的时候(例如:硬件负载不高、SQL优化和库表结构优化都不便奏效的时候),大家平日须求借助等待事件来拓展辨析,找出在MySQL
Server内部,到底数据库响应慢是慢在哪儿。

添加表的壮大属性:在Object Explorer中找到新建的表,右键选用属性。

1.数据库表级别对象等待事件总计

在上一篇《事件记录 |
performance_schema全方位介绍”》中,大家详细介绍了performance_schema的轩然大波记录表,恭喜大家在学习performance_schema的路上度过了八个最困难的一代。现在,相信大家早就比较清楚什么是事件了,但偶尔大家不需要精通每时每刻暴发的每一条事件记录音信,
例如:大家期待了解数据库运行以来一段时间的风浪计算数据,这么些时候就需求查阅事件计算表了。明天将教导大家一块踏上层层第四篇的征途(全系共7个篇章),在这一期里,我们将为大家无微不至授课performance_schema中事件计算表。计算事件表分为5个连串,分别为等待事件、阶段事件、语句事件、事务事件、内存事件。下边,请随行我们一齐先河performance_schema系统的学习之旅吧。

伺机事件记录表包涵三张表,那么些表记录了脚下与近期在MySQL实例中暴发了什么等待事件,时间成本是稍微。

图片 4

按照数据库对象名称(库级别对象和表级别对象,如:库名和表名)进行计算的等候事件。根据OBJECT_TYPE、OBJECT_SCHEMA、OBJECT_NAME列进行分组,根据COUNT_STAR、xxx_TIMER_WAIT字段举办计算。包括一张objects_summary_global_by_type表。

| 等待事件计算表

  • events_waits_current表:记录当前正值执行的等候事件的,每个线程只记录1行记下
  • events_waits_history表:记录已经履行完的近年的等待事件历史,默许每个线程只记录10行记录
  • events_waits_history_long表:记录已经推行完的近年的等候事件历史,默许所有线程的总记录行数为10000行

 figure-1

大家先来看望表中著录的统计音讯是什么样子的。

performance_schema把等待事件统计表按照分化的分组列(差别纬度)对等候事件有关的数目进行联谊(聚合总结数据列包蕴:事件时有暴发次数,总等待时间,最小、最大、平均等待时间),注意:等待事件的搜集功用有局地默许是禁用的,必要的时候可以通过setup_instruments和setup_objects表动态开启,等待事件总结表包括如下几张表:

要留意:等待事件相关安排中,setup_instruments表中多方面的等候事件instruments都未曾开启(IO相关的守候事件instruments默许半数以上已打开),setup_consumers表中waits相关的consumers配置默许没有拉开

 

admin@localhost : performance _schema 11:10:42> select * from
objects_summary _global_by _type where SUM_TIMER_WAIT!=0G;

admin@localhost : performance_schema 06:17:11> show tables like
‘%events_waits_summary%’;

events_waits_current 表

点击伸张属性,即可开展添加、修改和删除。

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

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

events_waits_current表包罗当前的守候事件音讯,每个线程只突显一行目前监视的等待事件的眼前意况

图片 5

OBJECT_TYPE: TABLE

| Tables_in_performance_schema (%events_waits_summary%) |

在富有包罗等待事件行的表中,events_waits_current表是最基础的数量来自。其他包蕴等待事件数据表在逻辑上是根源events_waits_current表中的当前事件信息(汇总表除外)。例如,events_waits_history和events_waits_history_long表中的数据是events_waits_current表数据的一个小集合汇总(具体存放多少行数据集合有各自的变量支配)

 figure-2

OBJECT_SCHEMA: xiaoboluo

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

表记录内容示例(这是一个举办select
sleep(100);语句的线程等待事件音信)

 

OBJECT_NAME: test

| events_waits_summary_by_account_by_event_name |

root@localhost : performance _schema 12:15:03> select * from
events_waits _current where EVENT_NAME=’wait/synch/cond/sql/Item
_func_sleep::cond’G;

添加字段的恢宏属性。

COUNT_STAR: 56

| events_waits_summary_by_host_by_event_name |

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

图片 6

SUM _TIMER_WAIT: 195829830101250

| events_waits_summary_by_instance |

THREAD_ID: 46

 figure-3

MIN _TIMER_WAIT: 2971125

| events_waits_summary_by_thread_by_event_name |

EVENT_ID: 140

 

AVG _TIMER_WAIT: 3496961251500

| events_waits_summary_by_user_by_event_name |

END_EVENT_ID: NULL

字段属性——描述,添加注释内容。

MAX _TIMER_WAIT: 121025235946125

| events_waits_summary_global_by_event_name |

EVENT_NAME: wait/synch/cond/sql/Item_func_sleep::cond

图片 7

1 row in set (0.00 sec)

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

SOURCE: item_func.cc:5261

 figure-4

从表中的笔录内容能够见见,按照库xiaoboluo下的表test举办分组,总结了表相关的等待事件调用次数,总括、最小、平均、最大延迟时间音信,利用那一个新闻,我们可以大概驾驭InnoDB中表的访问作用排名统计情状,一定水平上影响了对存储引擎接口调用的频率。

6rows inset ( 0. 00sec)

TIMER_START: 14128809267002592

 

2.表I/O等待和锁等待事件统计

大家先来探望那个表中著录的计算音讯是哪些样子的。

TIMER_END: 14132636159944419

 

与objects_summary_global_by_type
表计算信息类似,表I/O等待和锁等待事件计算音信更是精致,细分了每个表的增删改查的执行次数,总等待时间,最小、最大、平均等待时间,甚至精细到某个索引的增删改查的守候时间,表IO等待和锁等待事件instruments(wait/io/table/sql/handler和wait/lock/table/sql/handler
)默许开启,在setup_consumers表中无具体的对应配置,默许表IO等待和锁等待事件统计表中就会统计有关事件音信。包罗如下几张表:

# events_waits_summary_by_account_by_event_name表

TIMER_WAIT: 3826892941827

保存后,即可到位对字段扩充属性的丰裕。可因而系统视图sys.extended_properties举行询问。

admin@localhost : performance_schema 06:50:03> show tables like
‘%table%summary%’;

root@localhost : performance _schema 11:07:09> select * from
events_waits _summary_by _account_by _event_name limit 1G

SPINS: NULL

SELECT *,OBJECT_NAME(major_id) AS obj_name FROM sys.extended_properties

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

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

OBJECT_SCHEMA: NULL

 code-2

| Tables_in_performance_schema (%table%summary%) |

USER: NULL

OBJECT_NAME: NULL

 

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

HOST: NULL

INDEX_NAME: NULL

从下图可观察,刚才在SSMS上助长的特性已经被询问出来。默许的扩充属性名是MS_Description。

| table_io_waits_summary_by_index_usage |#
根据每个索引进行统计的表I/O等待事件

EVENT _NAME: wait/synch/mutex/sql/TC_LOG _MMAP::LOCK_tc

OBJECT_TYPE: NULL

图片 8

| table_io_waits_summary_by_table |#
根据每个表展开计算的表I/O等待事件

COUNT_STAR: 0

OBJECT _INSTANCE_BEGIN: 140568905519072

 figure-5

| table_lock_waits_summary_by_table |#
按照每个表举办计算的表锁等待事件

SUM _TIMER_WAIT: 0

NESTING _EVENT_ID: 116

 

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

MIN _TIMER_WAIT: 0

NESTING _EVENT_TYPE: STATEMENT

系统视图sys.extended_properties每个字段的详尽表明,可查看SQL联机从书。除了系统视图,也足以由此函数fn_listextendedproperty查询。

3rows inset ( 0. 00sec)

AVG _TIMER_WAIT: 0

OPERATION: timed_wait

SELECT objtype, objname, name, value
FROM fn_listextendedproperty(default, 'SCHEMA', 'dbo', 'TABLE', 'T8', default, default);

SELECT objtype,objname,name,value
FROM fn_listextendedproperty(default, 'SCHEMA', 'dbo', 'TABLE', 'T8', 'COLUMN', 'id');

SELECT objtype,objname,name,value
FROM fn_listextendedproperty(default, 'SCHEMA', 'dbo', 'TABLE', 'T8', 'COLUMN', 'name');

我们先来探视表中记录的统计音信是怎样体统的。

MAX _TIMER_WAIT: 0

NUMBER _OF_BYTES: NULL

 code-3

# table_io_waits_summary_by_index_usage表

1 row in set (0.00 sec)

FLAGS: NULL

 

admin@localhost : performance _schema 01:55:49> select * from
table_io _waits_summary _by_index _usage where
SUM_TIMER_WAIT!=0G;

# events_waits_summary_by_host_by_event_name表

1 row in set (0.00 sec)

图片 9

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

root@localhost : performance _schema 11:07:14> select * from
events_waits _summary_by _host_by _event_name limit 1G

地方的输出结果中,TIMER_WAIT字段即意味着该事件的小运支付,单位是飞秒,在事实上的拔取场景中,我们能够应用该字段音讯举行倒序排序,以便找出时间支付最大的等待事件。

figure-6

OBJECT_TYPE: TABLE

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

events_waits_current表完整的字段含义如下:

 

OBJECT_SCHEMA: xiaoboluo

HOST: NULL

THREAD_ID,EVENT_ID:与事件涉及的线程ID和当前事件ID。THREAD_ID和EVENT_ID值构成了该事件新闻行的唯一标识(不会有再一次的THREAD_ID+EVENT_ID值)

扩张属性可以应用有关的仓储进程进行尊崇。再实施code-1的代码,重建测试表,相关的属性也会删除。执行存储进程sp_addextendedproperty
举办添加。存储进程的参数使用,请查阅文档,本文末尾提供链接。

OBJECT_NAME: test

EVENT _NAME: wait/synch/mutex/sql/TC_LOG _MMAP::LOCK_tc

END_EVENT_ID:当一个事变正在实践时该列值为NULL,当一个风云实施完结时把该事件的ID更新到该列

EXEC sp_addextendedproperty 
@name = N'MS_Description',
@value = N'This is a table description on [T8](2).',
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = N'T8'
GO

EXEC sp_addextendedproperty 
@name = N'MS_Description',
@value = N'This is a column description on [id](2).',
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = N'T8',
@level2type = N'COLUMN', @level2name = N'id'
GO

EXEC sp_addextendedproperty 
@name = N'MS_Description',
@value = N'This is a column description on [name](2).',
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = N'T8',
@level2type = N'COLUMN', @level2name = N'name'
GO

关于数据库对象的扩展属性,事件记录。INDEX_NAME: PRIMARY

COUNT_STAR: 0

EVENT_NAME:暴发事件的instruments名称。该名称来自setup_instruments表的NAME字段值

code-4

COUNT_STAR: 1

SUM _TIMER_WAIT: 0

SOURCE:发生该事件的instruments所在的源文件名称以及检测到该事件爆发点的代码行号。您可以查看源代码来规定涉及的代码。例如,假如互斥锁、锁被卡住,您可以检查暴发那种情景的上下文环境

 

SUM _TIMER_WAIT: 56688392

MIN _TIMER_WAIT: 0

TIMER_START,TIMER_END,TIMER_WAIT:事件的时日新闻。单位毫秒(万亿分之一秒)。
TIMER_START和TIMER_END值表示事件伊始和终结时间。
TIMER_WAIT是事件经过岁月(即事件实施了多久)

查询sys.extended_properties,已经成功添加表和字段的扩大属性。

MIN _TIMER_WAIT: 56688392

AVG _TIMER_WAIT: 0

  • 假如事件未履行到位,则TIMER_END为当下计时器时间值(当前时光),TIMER_WAIT为目前甘休所通过的小时(TIMER_END –
    TIMER_START)
  • 万一采集该事件的instruments配置项TIMED =
    NO,则不会征集事件的日子新闻,TIMER_START,TIMER_END和TIMER_WAIT在这种境况下均记录为NULL

图片 10

AVG _TIMER_WAIT: 56688392

MAX _TIMER_WAIT: 0

SPINS:对于互斥量和自旋次数。即使该列值为NULL,则表示代码中从未采纳自旋或者说自旋没有被监控起来

figure-7

MAX _TIMER_WAIT: 56688392

1 row in set (0.00 sec)

OBJECT_SCHEMA,OBJECT_NAME,OBJECT_TYPE,OBJECT_INSTANCE_BEGIN:这几个列标识了一个正值被实践的对象,所以这么些列记录的音讯意义须要看对象是怎么品种,上面依据不一样目的类型分别对这个列的意义进行求证:

 

COUNT_READ: 1

# events_waits_summary_by_instance表

*
对于联合对象(cond,mutex,rwlock):

执行sp_dropextendedproperty删除现有扩充属性。

SUM _TIMER_READ: 56688392

root@localhost : performance _schema 11:08:05> select * from
events_waits _summary_by_instance limit 1G

*
1)、OBJECT_SCHEMA,OBJECT_NAME和OBJECT_TYPE列值都为NULL

EXEC sp_dropextendedproperty 
@name = N'MS_Description',
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = N'T8',
@level2type = N'COLUMN', @level2name = N'name'
GO

MIN _TIMER_READ: 56688392

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

*
2)、OBJECT_INSTANCE_BEGIN列是内存中同步对象的地点。OBJECT_INSTANCE_BEGIN除了不一致的值标记差异的目的之外,其值本身并未意思。但OBJECT_INSTANCE_BEGIN值可用来调试。例如,它能够与GROUP BY
OBJECT_INSTANCE_BEGIN子句一起行使来查看1,000个互斥体(例如:爱戴1,000个页或数据块)上的载重是不是是均匀分布仍旧时有暴发了一些瓶颈。借使在日记文件或其余调试、质量工具中看到与该语句查看的结果中有平等的对象地址,那么,在您解析质量难点时,可以把那些语句查看到的音讯与其它工具查看到的音信涉及起来。

code-5

AVG _TIMER_READ: 56688392

EVENT_NAME: wait/synch/mutex/mysys/THR_LOCK_heap

* 对于文本I/O对象:

 

MAX _TIMER_READ: 56688392

OBJECT _INSTANCE_BEGIN: 32492032

*
1)、OBJECT_SCHEMA列值为NULL

再查询sys.extended_properties,字段name的恢弘属性已经被去除。

……

COUNT_STAR: 0

* 2)、OBJECT_NAME列是文件名

图片 11

1 row in set (0.00 sec)

SUM _TIMER_WAIT: 0

* 3)、OBJECT_TYPE列为FILE

 figure-8

# table_io_waits_summary_by_table表

MIN _TIMER_WAIT: 0

*
4)、OBJECT_INSTANCE_BEGIN列是内存中的地点,解释同上

 

admin@localhost : performance _schema 01:56:16> select * from
table_io _waits_summary _by_table where SUM _TIMER_WAIT!=0G;

AVG _TIMER_WAIT: 0

* 对于套接字对象:

使用sp_updateextendedproperty更新扩张属性。

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

MAX _TIMER_WAIT: 0

* 1)、OBJECT_NAME列是套接字的IP:PORT值

EXEC sp_updateextendedproperty 
@name = N'MS_Description',
@value = N'This is a column description on [id](3).',
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = N'T8',
@level2type = N'COLUMN', @level2name = N'id'
GO

OBJECT_TYPE: TABLE

1 row in set (0.00 sec)

*
2)、OBJECT_INSTANCE_BEGIN列是内存中的地点,解释同上

code-6

OBJECT_SCHEMA: xiaoboluo

# events_waits_summary_by_thread_by_event_name表

* 对于表I/O对象:

 

OBJECT_NAME: test

root@localhost : performance _schema 11:08:23> select * from
events_waits _summary_by _thread_by _event_name limit 1G

* 1)、OBJECT_SCHEMA列是带有该表的库名称

图片 12

COUNT_STAR: 1

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

* 2)、OBJECT_NAME列是表名

figure-9

…………

THREAD_ID: 1

*
3)、OBJECT_TYPE列值对于基表或者TEMPORARY
TABLE临时表,该值是table,注意:对于在join查询中select_type为DERIVED,subquery等的表可能不记录事件新闻也不开展计算

 

1 row in set (0.00 sec)

EVENT _NAME: wait/synch/mutex/sql/TC_LOG _MMAP::LOCK_tc

*
4)、OBJECT_INSTANCE_BEGIN列是内存中的地址,解释同上

不光表可以加上扩充属性,其他数据库对象也可以,如数据库,索引等。

# table_lock_waits_summary_by_table表

COUNT_STAR: 0

INDEX_NAME:表示使用的目录的称号。PRIMARY表示使用到了主键。 NULL代表从没选择索引

USE AdventureWorks2008R2;
GO

SELECT *,OBJECT_NAME(major_id) AS obj_name FROM sys.extended_properties
GO

admin@localhost : performance _schema 01:57:20> select * from
table_lock _waits_summary _by_table where SUM _TIMER_WAIT!=0G;

SUM _TIMER_WAIT: 0

NESTING_EVENT_ID:表示该行音信中的EVENT_ID事件是嵌套在哪个事件中,即父事件的EVENT_ID

code-7

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

MIN _TIMER_WAIT: 0

NESTING_EVENT_TYPE:表示该行消息中的EVENT_ID事件嵌套的风波类型。有效值有:TRANSACTION,STATEMENT,STAGE或WAIT,即父事件的事件类型,假诺为TRANSACTION则必要到业务事件表中找对应NESTING_EVENT_ID值的风云,其他门类同理

 

OBJECT_TYPE: TABLE

AVG _TIMER_WAIT: 0

OPERATION:执行的操作类型,如:lock、read、write、timed_wait

图片 13

OBJECT_SCHEMA: xiaoboluo

MAX _TIMER_WAIT: 0

NUMBER_OF_BYTES:操作读取或写入的字节数或行数。对于文本IO等待,该列值表示字节数;对于表I/O等待(wait/io/table/sql/handler
instruments的轩然大波),该列值表示行数。倘若值超出1,则意味着该事件对应一个批量I/O操作。以下分别对单个表IO和批量表IO的不一致展开描述:

figure-10

OBJECT_NAME: test

1 row in set (0.00 sec)

  • MySQL的join查询利用嵌套循环完结。performance_schema
    instruments的出力是在join查询中提供对各种表的扫描行数和举行时间进行统计。示例:join查询语句:SELECT
    … FROM t1 JOIN t2 ON … JOIN t3 ON …,假诺join顺序是t1,t2,t3
  • 在join查询中,一个表在询问时与任何表展开联合查询未来,该表的扫视行数可能增加也恐怕回落,例如:如果t3表扇出超乎1,则一大半row
    fetch操作都是针对t3表,若是join查询从t1表访问10行记录,然后选拔t1表驱动查询t2表,t1表的每一行都会扫描t2表的20行记录,然后利用t2表驱动查询t3表,t2表的每一行都会扫描t3表的30行记录,那么,在使用单行输出时,instruments统计操作的轩然大波音信总行数为:10
    +(10 * 20)+(10 * 20 * 30)= 6210
  • 由此对表中行扫描时的instruments总括操作进行联谊(即,每个t1和t2的扫描行数在instruments统计中得以算作一个批量重组),那样就可以削减instruments计算操作的数目。通过批量I/O输出模式,performance_schema每趟对最内层表t3的扫描裁减为一个轩然大波总结新闻而不是每一行扫描都生成一个事变音信,此时对于instruments统计操作的事件行数量减弱到:10
    +(10 * 20)+(10 * 20)=
    410,这样在该join查询中对于performance_schema中的行统计操作就收缩了93%,批量出口策略通过减弱输出游数量来显着下跌表I/O的performance_schema统计开支。不过相对于每行数据都独立实施总括操作,会损失对时间总括的准确度。在join查询中,批量I/O计算的大运包涵用于连接缓冲、聚合和重回行到客户端的操作所消费的岁月(即就是整个join语句的施行时间)

 

…………

# events_waits_summary_by_user_by_event_name表

FLAGS:留作未来选择

图片 14

COUNT_READ_NORMAL: 0

root@localhost : performance _schema 11:08:36> select * from
events_waits _summary_by _user_by _event_name limit 1G

PS:events_waits_current表允许利用TRUNCATE TABLE语句

figure-11

SUM_TIMER_READ_NORMAL: 0

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

events_waits_history 表

 

MIN_TIMER_READ_NORMAL: 0

USER: NULL

events_waits_history表蕴含每个线程近日的N个等待事件。
在server启动时,N的值会自动调整。
假使要显式设置这几个N大小,可以在server启动从前调整系统参数performance_schema_events_waits_history_size的值。
等待事件须求举行落成时才被添加到events_waits_history表中(没有终结时保留在events_waits_current表)。当添加新事件到events_waits_history表时,假若该表已满,则会放任每个线程较旧的风浪

 

AVG_TIMER_READ_NORMAL: 0

EVENT _NAME: wait/synch/mutex/sql/TC_LOG _MMAP::LOCK_tc

events_waits_history与events_waits_current表定义相同

参照文档:

MAX_TIMER_READ_NORMAL: 0

COUNT_STAR: 0

PS:允许实施TRUNCATE TABLE语句

对数据库对象使用增加属性:

COUNT _READ_WITH _SHARED_LOCKS: 0

SUM _TIMER_WAIT: 0

events_waits_history_long 表

SUM _TIMER_READ _WITH_SHARED_LOCKS: 0

MIN _TIMER_WAIT: 0

events_waits_history_long表蕴含近日的N个等待事件(所有线程的风浪)。在server启动时,N的值会自动调整。
即使要显式设置那几个N大小,可以在server启动以前调整系统参数

翻开增加属性:

MIN _TIMER_READ _WITH_SHARED_LOCKS: 0

AVG _TIMER_WAIT: 0

performance_schema_events_waits_history_long_size的值。等待事件须要实践完结时才会被添加到events_waits_history_long表中(没有完毕时保留在events_waits_current表),当添加新事件到events_waits_history_long表时,如果该表已满,则会甩掉该表中较旧的风浪。

AVG _TIMER_READ _WITH_SHARED_LOCKS: 0

MAX _TIMER_WAIT: 0

events_waits_history_long与events_waits_current表结构同样

sys.extended_properties:

MAX _TIMER_READ _WITH_SHARED_LOCKS: 0

1 row in set (0.00 sec)

PS:允许拔取TRUNCATE TABLE语句

……

# events_waits_summary_global_by_event_name表

等级事件表

sp_addextendedproperty:

1 row in set (0.00 sec)

root@localhost : performance _schema 11:08:53> select * from
events_waits _summary_global _by_event_name limit 1G

等级事件记录表与等待事件记录表一样,也有三张表,这么些表记录了眼前与近日在MySQL实例中生出了何等阶段事件,时间消耗是有些。阶段指的是语句执行进度中的步骤,例如:parsing
、opening tables、filesort操作等。

从上边表中的笔录音讯大家得以看到,table_io_waits_summary_by_index_usage表和table_io_waits_summary_by_table有着相仿的总结列,但table_io_waits_summary_by_table表是包蕴全部表的增删改查等待事件分类总结,table_io_waits_summary_by_index_usage区分了各种表的目录的增删改查等待事件分类计算,而table_lock_waits_summary_by_table表总括纬度类似,但它是用于计算增删改查对应的锁等待时间,而不是IO等待时间,那么些表的分组和总括列含义请我们自行举一反三,那里不再赘言,上面针对那三张表做一些必备的表明:

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

在既往大家查阅语句执行的级差状态,寻常使用SHOW
PROCESSLIST语句或询问INFORMATION_SCHEMA.PROCESSLIST表来获取,但processlist情势可以查询到的音信比较单薄且时而即逝,大家平常需求结合profiling效用来进一步计算分析语句执行的次第阶段的付出等,现在,大家不要求那样劳顿,直接运用performance_schema的阶段事件就既可以查询到具备的说话执行等级,也得以查询到各种阶段对应的开销,因为是记录在表中,所以更可以行使SQL语句对那几个多少举行排序、计算等操作

sp_dropextendedproperty:

table_io_waits_summary_by_table表:

EVENT _NAME: wait/synch/mutex/sql/TC_LOG _MMAP::LOCK_tc

要专注:阶段事件有关计划中,setup_instruments表中stage/开端的绝半数以上instruments配置默许没有拉开(少数stage/开首的instruments除外,如DDL语句执行进程的stage/innodb/alter*始发的instruments默许开启的),setup_consumers表中stages相关的consumers配置默许没有打开

该表允许使用TRUNCATE
TABLE语句。只将总括列重置为零,而不是剔除行。对该表执行truncate还会隐式truncate
table_io_waits_summary_by_index_usage表

COUNT_STAR: 0

events_stages_current 表

sp_updateextendedproperty:

table_io_waits_summary_by_index_usage表:

SUM _TIMER_WAIT: 0

events_stages_current表包罗当前阶段事件的监察音信,每个线程一行记录彰显线程正在执行的stage事件的景象

按照与table_io_waits_summary_by_table的分组列+INDEX_NAME列举办分组,INDEX_NAME有如下二种:

MIN _TIMER_WAIT: 0

在富含stage事件记录的表中,events_stages_current是基准表,包罗stage事件记录的其余表(如:events_stages_history和events_stages_history_long表)的多少在逻辑上都来自events_stages_current表(汇总表除外)

fn_listextendedproperty:

·比方运用到了目录,则那里体现索引的名字,若是为PRIMARY,则象征表I/O使用到了主键索引

AVG _TIMER_WAIT: 0

表记录内容示例(以下依然是一个实践select
sleep(100);语句的线程,但此间是阶段事件音信)

·要是值为NULL,则象征表I/O没有动用到目录

MAX _TIMER_WAIT: 0

root@localhost : performance _schema 12:24:40> select * from
events_stages _current where EVENT_NAME=’stage/sql/User sleep’G;

 

·要是是插入操作,则无从运用到目录,此时的计算值是依照INDEX_NAME =
NULL计算的

1 row in set (0.00 sec)

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

该表允许利用TRUNCATE
TABLE语句。只将总括列重置为零,而不是剔除行。该表执行truncate时也会隐式触发table_io_waits_summary_by_table表的truncate操作。其余利用DDL语句更改索引结构时,会导致该表的拥有索引总结音信被重置

从地点表中的示范记录新闻中,大家得以看看:

THREAD_ID: 46

table_lock_waits_summary_by_table表:

每个表都有分其余一个或八个分组列,以确定什么聚合事件音讯(所有表都有EVENT_NAME列,列值与setup_instruments表中NAME列值对应),如下:

EVENT_ID: 280

该表的分组列与table_io_waits_summary_by_table表相同

events_waits_summary_by_account_by_event_name表:按照列EVENT_NAME、USER、HOST进行分组事件新闻

END _EVENT_ID: NULL

该表包括关于内部和表面锁的新闻:

events_waits_summary_by_host_by_event_name表:按照列EVENT_NAME、HOST进行分组事件信息

EVENT_NAME: stage/sql/User sleep

·里头锁对应SQL层中的锁。是经过调用thr_lock()函数来兑现的。(官方手册上说有一个OPERATION列来不同锁类型,该列有效值为: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。但在该表的定义上并不曾观察该字段)

events_waits_summary_by_instance表:按照列EVENT_NAME、OBJECT_INSTANCE_BEGIN举行分组事件音讯。固然一个instruments(event_name)创设有三个实例,则每个实例都富有唯一的OBJECT_INSTANCE_BEGIN值,因而每个实例会进展独立分组

SOURCE: item_func.cc:6056

·表面锁对应存储引擎层中的锁。通过调用handler::external_lock()函数来促成。(官方手册上说有一个OPERATION列来区分锁类型,该列有效值为:read
external、write external。但在该表的定义上并从未见到该字段)

events_waits_summary_by_thread_by_event_name表:按照列THREAD_ID、EVENT_NAME进行分组事件音讯

TIMER_START: 14645080545642000

该表允许利用TRUNCATE TABLE语句。只将总括列重置为零,而不是删除行。

events_waits_summary_by_user_by_event_name表:按照列EVENT_NAME、USER举行分组事件音讯

TIMER_END: 14698320697396000

3.文书I/O事件统计

events_waits_summary_global_by_event_name表:按照EVENT_NAME列举行分组事件新闻

TIMER_WAIT: 53240151754000

文本I/O事件计算表只记录等待事件中的IO事件(不含有table和socket子体系),文件I/O事件instruments默许开启,在setup_consumers表中无具体的相应配置。它包括如下两张表:

所有表的计算列(数值型)都为如下多少个:

WORK_COMPLETED: NULL

admin@localhost : performance_schema 06:48:12> show tables like
‘%file_summary%’;

COUNT_STAR:事件被执行的数额。此值包涵拥有事件的施行次数,需求启用等待事件的instruments

WORK_ESTIMATED: NULL

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

SUM_TIMER_WAIT:总计给定计时事件的总等待时间。此值仅针对有计时效应的轩然大波instruments或开启了计时功效事件的instruments,倘使某事件的instruments不协理计时依旧没有开启计时作用,则该字段为NULL。其余xxx_TIMER_WAIT字段值类似

NESTING _EVENT_ID: 266

| Tables_in_performance_schema (%file_summary%) |

MIN_TIMER_WAIT:给定计时事件的微小等待时间

NESTING _EVENT_TYPE: STATEMENT

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

AVG_TIMER_WAIT:给定计时事件的平分等待时间

1 row in set (0.00 sec)

| file_summary_by_event_name |

MAX_TIMER_WAIT:给定计时事件的最大等待时间

以上的输出结果与话语的等候事件方式类似,那里不再赘言,events_stages_current表完整的字段含义如下

| file_summary_by_instance |

PS:等待事件计算表允许行使TRUNCATE
TABLE语句。

THREAD_ID,EVENT_ID:与事件波及的线程ID和当前风云ID,可以动用THREAD_ID和EVENT_ID列值来唯一标识该行,那两行的值作为整合条件时不会现出一样的数据行

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

执行该语句时有如下行为:

END_EVENT_ID:当一个事变开首进行时,对应行记录的该列值被设置为NULL,当一个轩然大波实施已毕时,对应的行记录的该列值被更新为该事件的ID

2rows inset ( 0. 00sec)

对于未根据帐户、主机、用户聚集的总结表,truncate语句会将总计列值重置为零,而不是去除行。

EVENT_NAME:爆发事件的instruments的名号。该列值来自setup_instruments表的NAME值。instruments名称或者持有八个部分并形成层次结构,如:”stage/sql/Slave has read all relay log;
waiting for more updates”,其中stage是五星级名称,sql是二级名称,Slave has read all relay log; waiting for more
updates是第三级称号。详见链接:

两张表中记录的始末很相近:

对此按照帐户、主机、用户聚集的统计表,truncate语句会删除已开头连接的帐户,主机或用户对应的行,并将其他有连日的行的计算列值重置为零(实测跟未按照帐号、主机、用户聚集的总计表一样,只会被重置不会被去除)。

·file_summary_by_event_name:根据每个事件名称举行总计的公文IO等待事件

别的,根据帐户、主机、用户、线程聚合的每个等待事件总结表或者events_waits_summary_global_by_event_name表,假使借助的连接表(accounts、hosts、users表)执行truncate时,那么依赖的那个表中的计算数据也会同时被隐式truncate

SOURCE:源文件的称号及其用于检测该事件的代码位于源文件中的行号

·file_summary_by_instance:依照每个文件实例(对应现实的每个磁盘文件,例如:表sbtest1的表空间文件sbtest1.ibd)举办计算的文书IO等待事件

注意:这么些表只针对等待事件新闻举行总结,即包括setup_instruments表中的wait/%开头的搜集器+
idle空闲采集器,每个等待事件在每个表中的总括记录行数必要看怎样分组(例如:根据用户分组计算的表中,有些许个活泼用户,表中就会有多少条相同采集器的记录),别的,总结计数器是或不是见效还要求看setup_instruments表中相应的守候事件采集器是还是不是启用。

TIMER_START,TIMER_END,TIMER_WAIT:事件的光阴信息。那一个值的单位是微秒(万亿分之一秒)。TIMER_START和TIMER_END值表示事件的开首时间和完工时间。TIMER_WAIT是事件实施消耗的时刻(持续时间)

咱俩先来看看表中记录的计算音讯是何许体统的。

| 阶段事件总计表

  • 若是事件未举办到位,则TIMER_END为当下岁月,TIMER_WAIT为眼前甘休所通过的光阴(TIMER_END –
    TIMER_START)
  • 如果instruments配置表setup_instruments中对应的instruments
    的TIMED字段被安装为
    NO,则该instruments禁用时间采访作用,那么事件采访的新闻记录中,TIMER_START,TIMER_END和TIMER_WAIT字段值均为NULL

# file_summary_by_event_name表

performance_schema把阶段事件计算表也如约与等待事件计算表类似的规则举办分拣聚合,阶段事件也有一对是默许禁用的,一部分是翻开的,阶段事件总括表包括如下几张表:

WORK_COMPLETED,WORK_ESTIMATED:这一个列提供了阶段事件进度音讯

admin@localhost : performance _schema 11:00:44> select * from
file_summary _by_event _name where SUM_TIMER _WAIT !=0 and
EVENT_NAME like ‘%innodb%’ limit 1G;

admin@localhost : performance_schema 06:23:02> show tables like
‘%events_stages_summary%’;

  • 表中的WORK_COMPLETED和WORK_ESTIMATED两列,它们一起合营展现每一行的速度突显:

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

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

*
1)、WORK_COMPLETED:展现阶段事件已形成的工作单元数

EVENT_NAME: wait/io/file/innodb/innodb_data_file

| Tables_in_performance_schema (%events_stages_summary%) |

*
2)、WORK_ESTIMATED:展现估摸阶段事件将要完结的劳作单元数

COUNT_STAR: 802

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

  • 假如instruments没有提供进程相关的作用,则该instruments执行事件采访时就不会有速度音讯显示,WORK_COMPLETED和WORK_ESTIMATED列都会体现为NULL。借使进度音讯可用,则进程新闻怎么着体现取决于instruments的实践情况。performance_schema表提供了一个仓储进度数据的容器,但不会假诺你会定义何种度量单位来使用这个进程数据:

SUM_TIMER_WAIT: 412754363625

| events_stages_summary_by_account_by_event_name |

*
1)、“工作单元”是在实施进程中随时间增添而充实的平头度量,例如执行进度中的字节数、行数、文件数或表数。对于特定instruments的“工作单元”的定义留给提供数据的instruments代码

MIN_TIMER_WAIT: 0

| events_stages_summary_by_host_by_event_name |

*
2)、WORK_COMPLETED值根据检测的代码不一样,可以五遍增添一个或四个单元

AVG_TIMER_WAIT: 514656000

| events_stages_summary_by_thread_by_event_name |

*
3)、WORK_ESTIMATED值根据检测代码,可能在等级事件实施进程中暴发变化

MAX_TIMER_WAIT: 9498247500

| events_stages_summary_by_user_by_event_name |

  • 等级事件进程提醒器的显现作为有以下三种情形:

COUNT_READ: 577

| events_stages_summary_global_by_event_name |

*
1)、instruments不协助进度:没有可用进程数据,
WORK_COMPLETED和WORK_ESTIMATED列都来得为NULL

SUM_TIMER_READ: 305970952875

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

* 2)
、instruments协助进程但对应的行事负荷总工作量不可预估(无限进程):只有WORK_COMPLETED列有含义(因为她显得正在举行的快慢展现),WORK_ESTIMATED列此时不行,突显为0,因为从没可预估的总进程数据。通过查询events_stages_current表来监视会话,监控应用程序到近期停止执行了有些办事,但不可以告诉对应的干活是不是接近落成

MIN_TIMER_READ: 15213375

5rows inset ( 0. 00sec)

*
3)、instruments辅助进程,总工作量可预估(有限进程):WORK_COMPLETED和WORK_ESTIMATED列值有效。那系列型的快慢突显可用于online
DDL时期的copy表阶段监视。通过查询events_stages_current表,可监控应用程序当前一度完结了稍稍工作,并且可以由此WORK_COMPLETED
/ WORK_ESTIMATED统计的比率来预估某个阶段总体形成比例

AVG_TIMER_READ: 530278875

大家先来看望那些表中记录的统计新闻是如何体统的。

NESTING_EVENT_ID:事件的嵌套事件EVENT_ID值(父事件ID)

MAX_TIMER_READ: 9498247500

# events_stages_summary_by_account_by_event_name表

NESTING_EVENT_TYPE:嵌套事件类型。有效值为:TRANSACTION,STATEMENT,STAGE,WAIT。阶段事件的嵌套事件司空眼惯是statement

SUM _NUMBER_OF _BYTES_READ: 11567104

root@localhost : performance _schema 11:21:04> select * from
events_stages _summary_by _account_by _event_name where USER is
not null limit 1G

对于events_stages_current表允许使用TRUNCATE
TABLE语句来拓展清理

……

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

PS:stage事件拥有一个进程体现效果,大家可以使用该进程体现效果来打探一些长日子执行的SQL的快慢百分比,例如:对于急需选用COPY方式进行的online
ddl,那么须要copy的数据量是一定的,可以明确的,so..那就可以为”stage/sql/copy
to tmp table stage”
instruments提供一个有收尾边界参照的快慢数据新闻,那些instruments所使用的干活单元就是索要复制的多寡行数,此时WORK_COMPLETED和WORK_ESTIMATED列值都是行得通的可用的,两者的乘除比例就象征近来copy表达成copy的行数据百分比。

1 row in set (0.00 sec)

USER: root

  • 要查阅copy表阶段事件的正在实践的速度监视功用,须求开辟相关的instruments和consumers,然后查看events_stages_current表,如下:

# file_summary_by_instance表

HOST: localhost

# 配置相关instruments和consumers

admin@localhost : performance _schema 11:01:23> select * from
file_summary _by_instance where SUM _TIMER_WAIT!=0 and EVENT_NAME
like ‘%innodb%’ limit 1G;

EVENT_NAME: stage/sql/After create

UPDATEsetup_instruments SETENABLED= ‘YES’WHERENAME= ‘stage/sql/copy to
tmp table’;

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

COUNT_STAR: 0

UPDATEsetup_consumers SETENABLED=
‘YES’WHERENAMELIKE’events_stages_%’;

FILE_NAME: /data/mysqldata1/innodb_ts/ibdata1

SUM _TIMER_WAIT: 0

# 然后在执行ALTER TABLE语句时期,查看events_stages_current表

EVENT_NAME: wait/io/file/innodb/innodb_data_file

MIN _TIMER_WAIT: 0

events_stages_history 表

OBJECT _INSTANCE_BEGIN: 139882156936704

AVG _TIMER_WAIT: 0

events_stages_history表包罗每个线程最新的N个阶段事件。
在server启动时,N的值会自动调整。
若是要显式设置N值大小,可以在server启动此前安装系统变量performance_schema_events_stages_history_size的值。stages事件在实施落成时才添加到events_stages_history表中。
当添加新事件到events_stages_history表时,如果events_stages_history表已满,则会放任对应线程较旧的风浪events_stages_history与events_stages_current表结构同样

COUNT_STAR: 33

MAX _TIMER_WAIT: 0

PS:允许使用TRUNCATE TABLE语句

…………

1 row in set (0.01 sec)

events_stages_history_long 表

1 row in set (0.00 sec)

# events_stages_summary_by_host_by_event_name表

events_stages_history_long表包括近年来的N个阶段事件。
在server启动时,N的值会自动调整。
如若要显式设置N值大小,能够在server启动以前安装系统变量performance_schema_events_stages_history_long_size的值。stages事件实施完成时才会添加到events_stages_history_long表中,当添加新事件到events_stages_history_long表时,如果events_stages_history_long表已满,则会丢掉该表中较旧的事件events_stages_history_long与events_stages_current表结构同样

从地方表中的笔录信息大家可以观望:

root@localhost : performance _schema 11:29:27> select * from
events_stages _summary_by _host_by _event_name where HOST is not
null limit 1G

PS:允许行使TRUNCATE TABLE语句

·每个文件I/O计算表都有一个或八个分组列,以标明怎样总括那么些事件信息。这几个表中的事件名称来自setup_instruments表中的name字段:

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

话语事件表

* file_summary_by_event_name表:按照EVENT_NAME列进行分组 ;

HOST: localhost

话语事件记录表与等待事件记录表一样,也有三张表,这几个表记录了脚下与近日在MySQL实例中发出了哪些语句事件,时间开销是稍微。记录了各类各个的言语执行发生的言语事件新闻。

*
file_summary_by_instance表:有极度的FILE_NAME、OBJECT_INSTANCE_BEGIN列,按照FILE_NAME、EVENT_NAME列举办分组,与file_summary_by_event_name
表相比,file_summary_by_instance表多了FILE_NAME和OBJECT_INSTANCE_BEGIN字段,用于记录具体的磁盘文件有关信息。

EVENT_NAME: stage/sql/After create

要留意:语句事件相关布置中,setup_instruments表中statement/*始发的具有instruments配置默许开启,setup_consumers表中statements相关的consumers配置默许开启了events_statements_current、events_statements_history、statements_digest(对应events_statements_summary_by_digest表,详见后续章节)但一贯不开启events_statements_history_long。

·各样文件I/O事件计算表有如下计算字段:

COUNT_STAR: 0

events_statements_current 表

*
COUNT_STAR,SUM_TIMER_WAIT,MIN_TIMER_WAIT,AVG_TIMER_WAIT,MAX_TIMER_WAIT:这几个列统计所有I/O操作数量和操作时间

SUM _TIMER_WAIT: 0

events_statements_current表包括当前讲话事件,每个线程只突显一行目前被监视语句事件的眼前事态。

*
COUNT_READ,SUM_TIMER_READ,MIN_TIMER_READ,AVG_TIMER_READ,MAX_TIMER_READ,SUM_NUMBER_OF_BYTES_READ:那个列计算了独具文件读取操作,包涵FGETS,FGETC,FREAD和READ系统调用,还带有了那些I/O操作的数码字节数

MIN _TIMER_WAIT: 0

在包蕴语句事件行的表中,events_statements_current当前风云表是基础表。其他富含语句事件表中的数码在逻辑上来自当前事变表(汇总表除外)。例如:events_statements_history和events_statements_history_long表是近来的言语事件历史的聚集,events_statements_history表中各样线程默许保留10行事件历史音信,events_statements_history_long表中默许所有线程保留10000行事件历史新闻

*
COUNT_WRITE,SUM_TIMER_WRITE,MIN_TIMER_WRITE,AVG_TIMER_WRITE,MAX_TIMER_WRITE,SUM_NUMBER_OF_BYTES_WRITE:那一个列统计了具备文件写操作,包罗FPUTS,FPUTC,FPRINTF,VFPRINTF,FWRITE和PWRITE系统调用,还富含了那个I/O操作的数量字节数

AVG _TIMER_WAIT: 0

表记录内容示例(以下音讯仍然来自select
sleep(100);语句的语句事件音信)

*
COUNT_MISC,SUM_TIMER_MISC,MIN_TIMER_MISC,AVG_TIMER_MISC,MAX_TIMER_MISC:那个列计算了有着其他文件I/O操作,包罗CREATE,DELETE,OPEN,CLOSE,STREAM_OPEN,STREAM_CLOSE,SEEK,TELL,FLUSH,STAT,FSTAT,CHSIZE,RENAME和SYNC系统调用。注意:这几个文件I/O操作没有字节计数消息。

MAX _TIMER_WAIT: 0

root@localhost : performance_schema 12: 36: 35> select * from
events_statements_current where SQL_TEXT= ‘select sleep(100)’G;

文本I/O事件计算表允许选拔TRUNCATE
TABLE语句。但只将计算列重置为零,而不是剔除行。

1 row in set (0.00 sec)

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

PS:MySQL
server使用两种缓存技术通过缓存从文件中读取的音信来幸免文件I/O操作。当然,如果内存不够时或者内存竞争相比大时或许引致查询效能低下,这几个时候你可能须求经过刷新缓存或者重启server来让其数量经过文件I/O重临而不是透过缓存再次来到。

# events_stages_summary_by_thread_by_event_name表

THREAD_ID: 46

4.套接字事件计算

root@localhost : performance _schema 11:37:03> select * from
events_stages _summary_by _thread_by _event_name where thread_id
is not null limit 1G

EVENT_ID: 334

套接字事件总计了套接字的读写调用次数和殡葬接收字节计数信息,socket事件instruments默许关闭,在setup_consumers表中无实际的呼应配置,包括如下两张表:

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

END_EVENT_ID: NULL

·socket_summary_by_instance:针对各样socket实例的享有 socket
I/O操作,那个socket操作相关的操作次数、时间和殡葬接收字节新闻由wait/io/socket/*
instruments发生。但当连接中断时,在该表中对应socket连接的新闻就要被删除(这里的socket是指的眼前活跃的一而再创造的socket实例)

THREAD_ID: 1

EVENT_NAME: statement/sql/select

·socket_summary_by_event_name:针对种种socket I/O
instruments,那一个socket操作相关的操作次数、时间和发送接收字节音讯由wait/io/socket/*
instruments发生(那里的socket是指的此时此刻活蹦乱跳的连年创设的socket实例)

EVENT_NAME: stage/sql/After create

SOURCE: socket_connection.cc: 101

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图