MySQL Performance-Schema(二) 理论篇,performanceschema

by admin on 2019年8月3日

TIMER_END: 1582395491787190144

· OWNER_THREAD_ID:持有该handles锁的线程ID;

MySQL Performance-Schema(二) 理论篇,performanceschema

     MySQL
Performance-Schema中累计包蕴伍十六个表,主要分为几类:Setup表,Instance表,Wait
Event表,Stage 伊夫nt表Statement
Event表,Connection表和Summary表。上一篇小说已经首要讲了Setup表,那篇小说将会独家就每种档期的顺序的表做详细的描述。

Instance表
   
 instance中根本含有了5张表:cond_instances,file_instances,mutex_instances,rwlock_instances和socket_instances。
(1)cond_instances:条件等待对象实例
表中著录了系统中央银行使的基准变量的目的,OBJECT_INSTANCE_BEGIN为对象的内部存款和储蓄器地址。举个例子线程池的timer_cond实例的name为:wait/synch/cond/threadpool/timer_cond

(2)file_instances:文件实例
表中著录了系统中开荒了文件的对象,满含ibdata文件,redo文件,binlog文件,用户的表文件等,比如redo日志文件:/u01/my3306/data/ib_logfile0。open_count彰显当前文件张开的数目,假设重来没有展开过,不会冒出在表中。

(3)mutex_instances:互斥同步对象实例
表中著录了系统中利用互斥量对象的具有记录,在这之中name为:wait/synch/mutex/*。比方展开文件的互斥量:wait/synch/mutex/mysys/TH福睿斯_LOCK_open。LOCKED_BY_THREAD_ID展现哪个线程正持有mutex,若未有线程持有,则为NULL。

(4)rwlock_instances: 读写锁同步对象实例
表中著录了系统中央银行使读写锁对象的具备记录,当中name为
wait/synch/rwlock/*。WRITE_LOCKED_BY_THREAD_ID为正在有着该目的的thread_id,若未有线程持有,则为NULL,READ_LOCKED_BY_COUNT为记录了并且有个别许个读者持有读锁。通过
events_waits_current
表能够领略,哪个线程在等候锁;通过rwlock_instances知道哪些线程持有锁。rwlock_instances的老毛病是,只可以记录持有写锁的线程,对于读锁则不或然。

(5)socket_instances:活跃会话对象实例
表中记录了thread_id,socket_id,ip和port,别的表能够透过thread_id与socket_instance进行关联,获取IP-PORT消息,能够与利用接入起来。
event_name首要包括3类:
wait/io/socket/sql/server_unix_socket,服务端unix监听socket
wait/io/socket/sql/server_tcpip_socket,服务端tcp监听socket
wait/io/socket/sql/client_connection,客户端socket

Wait Event表
     
Wait表重要涵盖3个表,events_waits_current,events_waits_history和events_waits_history_long,通过thread_id+event_id能够独一鲜明一条记下。current表记录了近些日子线程等待的事件,history表记录了每一种线程前段时间拭目以俟的12个事件,而history_long表则记录了多年来抱有线程发生的10000个事件,这里的10和一千0都以足以布置的。那八个表表结构一样,history和history_long表数据都来自current表。current表和history表中只怕会有重复事件,并且history表中的事件都以产生了的,未有截至的平地风波不会参预到history表中。
THREAD_ID:线程ID
EVENT_ID:当前线程的平地风波ID,和THREAD_ID组成四个Primary Key。
END_EVENT_ID:当事件初步时,这一列被设置为NULL。当事件截止时,再立异为当前的事件ID。
SOURCE:该事件发生时的源码文件
TIMER_START, TIMER_END,
TIMER_WAIT:事件先导/结束和等候的时日,单位为阿秒(picoseconds)

OBJECT_SCHEMA, OBJECT_NAME, OBJECT_TYPE视景况而定
对此联合对象(cond, mutex, rwlock),那些3个值均为NULL
对于文本IO对象,OBJECT_SCHEMA为NULL,OBJECT_NAME为文件名,OBJECT_TYPE为FILE
对于SOCKET对象,OBJECT_NAME为该socket的IP:SOCK值
对于表I/O对象,OBJECT_SCHEMA是表的SCHEMA名,OBJECT_NAME是表名,OBJECT_TYPE为TABLE或者TEMPORARY
TABLE
NESTING_EVENT_ID:该事件对应的父事件ID
NESTING_EVENT_TYPE:父事件类型(STATEMENT, STAGE, WAIT)
OPERATION:操作类型(lock, read, write)

Stage Event表 

     
 Stage表首要涵盖3个表,events_stages_current,events_stages_history和events_stages_history_long,通过thread_id+event_id可以独一分明一条记下。表中记录了近日线程所处的实施阶段,由于能够知晓各样阶段的进行时间,由此通过stage表能够博得SQL在每个阶段消耗的年月。

THREAD_ID:线程ID
EVENT_ID:事件ID
END_EVENT_ID:刚停止的风云ID
SOURCE:源码地方
TIMER_START, TIMER_END,
TIMER_WAIT:事件始于/结束和等待的光阴,单位为皮秒(picoseconds)
NESTING_EVENT_ID:该事件对应的父事件ID
NESTING_EVENT_TYPE:父事件类型(STATEMENT, STAGE, WAIT)

Statement Event表
     
Statement表首要富含3个表,events_statements_current,events_statements_history和events_statements_history_long。通过thread_id+event_id可以独一显明一条记下。Statments表只记录最顶层的呼吁,SQL语句或是COMMAND,每条语句一行,对于嵌套的子查询也许存款和储蓄进程不会单独列出。event_name形式为statement/sql/*,或statement/com/*
SQL_TEXT:记录SQL语句
DIGEST:对SQL_TEXT做MD5发生的三19位字符串。假使为consumer表中绝非张开statement_digest选项,则为NULL。
DIGEST_TEXT:将讲话中值部分用问号替代,用于SQL语句归类。假使为consumer表中尚无展开statement_digest选项,则为NULL。
CURRENT_SCHEMA:默许的数据库名
OBJECT_SCHEMA,OBJECT_NAME,OBJECT_TYPE:保留字段,全体为NULL
ROWS_AFFECTED:影响的数额
ROWS_SENT:重返的记录数
ROWS_EXAMINED:读取的记录数据
CREATED_TMP_DISK_TABLES:创建物理不常表数目
CREATED_TMP_TABLES:创造有时表数目
SELECT_FULL_JOIN:join时,第一个表为全表扫描的数量
SELECT_FULL_RANGE_JOIN:join时,引用表选择range格局扫描的数码
SELECT_RANGE:join时,第贰个表采纳range格局扫描的多寡
SELECT_SCAN:join时,第三个表位全表扫描的数目
SORT_ROWS:排序的记录数据
NESTING_EVENT_ID,NESTING_EVENT_TYPE,保留字段,为NULL。

Connection表
   
 Connection表记录了客户端的信息,主要不外乎3张表:users,hosts和account表,accounts包罗hosts和users的新闻。
USER:用户名
HOST:用户的IP

Summary表
   
Summary表聚焦了逐个维度的总计音讯包罗表维度,索引维度,会话维度,语句维度和锁维度的总计消息。
(1).wait-summary表
events_waits_summary_global_by_event_name
场景:按等待事件类型聚合,各样事件一条记下。
events_waits_summary_by_instance
情形:按等待事件目的聚合,同一种等待事件,可能有多个实例,各个实例有例外的内部存款和储蓄器地址,由此
event_name+object_instance_begin唯一分明一条记下。
events_waits_summary_by_thread_by_event_name
情形:按各种线程和事件来总结,thread_id+event_name独一分明一条记下。
COUNT_STA奇骏:事件计数
SUM_TIMER_WAIT:总的等待时间
MIN_TIMER_WAIT:最小等待时间
MAX_TIMER_WAIT:最大等待时间
AVG_TIMER_WAIT:平均等待时间

(2).stage-summary表
events_stages_summary_by_thread_by_event_name
events_stages_summary_global_by_event_name
与日前类似

(3).statements-summary表
events_statements_summary_by_thread_by_event_name表和events_statements_summary_global_by_event_name表与前方类似。对于events_statements_summary_by_digest表,
FIRST_SEEN_TIMESTAMP:第三个语句试行的时间
LAST_SEEN_TIMESTAMP:最终八个言语推行的时日
情景:用于总计某一段时间内top SQL

(4).file I/O summary表
file_summary_by_event_name [按事件类型计算]
file_summary_by_instance [按实际文件总括]
场景:物理IO维度
FILE_NAME:具体文件名,比方:/u01/my3306/data/tcbuyer_0168/tc_biz_order_2695.ibd
EVENT_NAME:事件名,比如:wait/io/file/innodb/innodb_data_file
COUNT_STAR,SUM_TIMER_WAIT,MIN_TIMER_WAIT,AVG_TIMER_WAIT,MAX_TIMER_WAIT
统计IO操作
COUNT_READ,SUM_TIMER_READ,MIN_TIMER_READ,AVG_TIMER_READ,MAX_TIMER_READ,
SUM_NUMBER_OF_BYTES_READ
统计读
COUNT_WRITE,SUM_TIMER_WRITE,MIN_TIMER_WRITE,AVG_TIMER_WRITE,MAX_TIMER_WRITE,
SUM_NUMBER_OF_BYTES_WRITE
统计写
COUNT_MISC,SUM_TIMER_MISC,MIN_TIMER_MISC,AVG_TIMER_MISC,MAX_TIMER_MISC
总括别的IO事件,举个例子create,delete,open,close等

(5).Table I/O and Lock Wait Summaries-表
table_io_waits_summary_by_table
依附wait/io/table/sql/handler,聚合每一种表的I/O操作,[逻辑IO]
COUNT_STAR,SUM_TIMER_WAIT,MIN_TIMER_WAIT,AVG_TIMER_WAIT,MAX_TIMER_WAIT
统计IO操作
COUNT_STAR,SUM_TIMER_WAIT,MIN_TIMER_WAIT,AVG_TIMER_WAIT,MAX_TIMER_WAIT
统计读
COUNT_WRITE,SUM_TIMER_WRITE,MIN_TIMER_WRITE,AVG_TIMER_WRITE,
MAX_TIMER_WRITE
统计写
COUNT_FETCH,SUM_TIMER_FETCH,MIN_TIMER_FETCH,AVG_TIMER_FETCH,
MAX_TIMER_FETCH
与读一样
COUNT_INSERT,SUM_TIMER_INSERT,MIN_TIMER_INSERT,AVG_TIMER_INSERT,MAX_TIMER_INSERT
INSERT总结,相应的还恐怕有DELETE和UPDATE总括。

(6).table_io_waits_summary_by_index_usage
与table_io_waits_summary_by_table类似,按索引维度总计

(7).table_lock_waits_summary_by_table
会面了表锁等待事件,包罗internal lock 和 external lock。
internal lock通过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

external lock则经过接口函数handler::external_lock调用存款和储蓄引擎层,
OPERATION列的值为:
read external
write external

(8).Connection Summaries表
events_waits_summary_by_account_by_event_name
events_waits_summary_by_user_by_event_name
events_waits_summary_by_host_by_event_name
events_stages_summary_by_account_by_event_name
events_stages_summary_by_user_by_event_name
events_stages_summary_by_host_by_event_name
events_statements_summary_by_account_by_event_name
events_statements_summary_by_user_by_event_name
events_statements_summary_by_host_by_event_name

(9).socket-summaries表
socket_summary_by_instance
socket_summary_by_event_name

其它表
performance_timers: 系统协理的计算时间单位
threads: 监视服务端的脚下运维的线程

Performance-Schema(二)
理论篇,performanceschema MySQL
Performance-Schema中一共包涵五18个表,主要分为几类:Setup表,Instance表,Wait
伊芙nt表,Stage Ev…

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

·ATTR_NAME:连接属性名称;

2.4.
performance_schema轻巧布署与利用

·凭仗于连接表中国国投息的summary表在对那个连接表施行truncate时会同有的时候候被隐式地进行truncate,performance_schema维护着依照accounts,hosts或users计算各样风浪总计表。那几个表在名称包含:_summary_by_account,_summary_by_host,*_summary_by_user

|
memory_summary_by_user_by_event_name |

# socket_summary_by_event_name表

接下来,简介了如何急忙上手使用performance_schema的方法;

·PHP定义的习性依赖于编写翻译的习性:

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

* _thread:客户端线程ID(仅适用于Windows)

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

依据央浼锁的线程数以及所央浼的锁的属性,访谈格局有:独占情势、分享独占形式、分享情势、或许所央求的锁不能够被整个授予,须要先等待别的线程实现并释放。

qogir_env@localhost :
performance_schema 03:55:07>
show tables like ‘events_stage%’;

·OBJECT_INSTANCE_BEGIN:prepare语句事件的instruments
实例内存地址。

| setup_timers |

·PROCESSLIST_ID:会话的连年标志符,与show
processlist结果中的ID字段同样;

qogir_env@localhost :
performance_schema 06:27:26>
SELECT * FROM file_instances limit 20;

SUM_ERRORS: 0

| /data/mysqldata1/undo/undo002
|wait/io/file/innodb/innodb_data_file | 3 |

(1) session_account_connect_attrs表

2.3. performance_schema表的分类

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

MySQL的performance schema 用于监控MySQL
server在一个好低档其余运营进程中的能源消耗、能源等待等情景,它装有以下特征:

图片 1

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

大家先来寻访表中著录的总结音讯是哪些样子的。

| Tables_in_performance_schema
(%memory%) |

4.套接字事件总计

| file_instances |

·当有着互斥体的线程释放互斥体时,mutex_instances表中对应排斥体行的THREAD_ID列被更动为NULL;

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

AVG _TIMER_READ _WITH_SHARED_LOCKS: 0

正文小结

·setup_instruments表列出了instruments名称,那些互斥体都带有wait/synch/mutex/前缀;

Rowsmatched: 3 Changed: 3 Warnings: 0

AVG_TIMER_READ_NORMAL: 0

数据库刚刚开端化并运营时,实际不是全体instruments(事件访问项,在访谈项的安顿表中每一类都有三个按钮字段,或为YES,或为NO)和consumers(与征集项类似,也可以有一个应和的风浪类型保存表配置项,为YES就代表对应的表保存品质数据,为NO就意味着对应的表不保留品质数据)都启用了,所以暗中同意不会搜罗全数的风云,可能您要求检验的平地风波并从未张开,供给进行安装,能够动用如下三个语句展开对应的instruments和consumers(行计数恐怕会因MySQL版本而异),举个例子,大家以安顿监测等待事件数量为例进行表达:

·CURRENT_CONNECTIONS:某用户的当下连接数;

打开等待事件的保存表配置按钮,修改修改setup_consumers
配置表中对应的配置i向

表字段含义与session_account_connect_attrs表一样,然而该表是保留全数连接的接二连三属性表。

IT从业多年,历任运转程序猿、高端运转工程师、运行首席营业官、数据库程序员,曾涉足版本发表系统、轻量级监察和控制系统、运转管理平台、数据库管理平台的规划与编写制定,掌握MySQL系列布局,Innodb存款和储蓄引擎,喜好专研开源技巧,追求左右逢源。

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

动态对performance_schema进行安排的配置表:

该表允许利用TRUNCATE
TABLE语句。只将总括列重新恢复设置为零,并非删除行。对该表施行truncate还会隐式truncate
table_io_waits_summary_by_index_usage表

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

当客户端与server端创立连接时,performance_schema使用符合各样表的当世无双标记值来分明每一种连接表中如何开始展览记录。借使远远不足对应标识值的行,则新增添加一行。然后,performance_schema会追加该行中的CU途达RENT_CONNECTIONS和TOTAL_CONNECTIONS列值。

| 4 |342|
wait/synch/mutex/innodb/fil_system_mutex |32832|

OBJECT_NAME: test

#
这几个结果注解,TH景逸SUV_LOCK_malloc互斥事件是最热的。注:TH昂Cora_LOCK_malloc互斥事件仅在DEBUG版本中留存,GA版本不设有

OBJECT_SCHEMA: xiaoboluo

当大家看到PEWranglerFORMANCE_SCHEMA
对应的Support
字段输出为YES时就意味着大家当下的数据库版本是永葆performance_schema的。但敞亮大家的实例扶助performance_schema引擎就足以应用了呢?NO,很不满,performance_schema在5.6及其在此以前的本子中,暗许未有启用,从5.7会同之后的版本才修改为暗许启用。以后,大家来看看哪些设置performance_schema私下认可启用吧!

·HOST:某总是的客户端主机名。假设是贰个里边线程创制的总是,或许是力不能支验证的用户创制的接连,则该字段为NULL;

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

|TABLE | xiaoboluo |test | 140568038528544 |0| 0 |NULL | NULL |

|
events_statements_summary_by_program |

hosts表字段含义如下:

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

admin@localhost : performance_schema 11:00:45> select * from
session_account_connect_attrs;

|
events_transactions_summary_by_account_by_event_name |

经过对以下八个表推行查询,能够完结对应用程序的监察或DBA能够检验到关系互斥体的线程之间的瓶颈或死锁消息(events_waits_current可以查阅到当前正在等候互斥体的线程新闻,mutex_instances能够查看到近期有个别互斥体被哪些线程持有)。

|4|
349 |wait/synch/mutex/innodb/fil_system_mutex | 65664 |

COUNT_STAR: 2560

|
/data/mysqldata1/mydata/multi_master/test.ibd
|wait/io/file/innodb/innodb_data_file | 1 |

·当三个线程正在等候某件事爆发时,condition
NAME列展现了线程正在等待什么condition(但该表中并从未其它列来展现对应哪个线程等音信),可是近日还并没有一贯的格局来决断某些线程或有些线程会促成condition爆发变动。

NUMBER_OF_BYTES: NULL

·当待管理的锁乞求超时,会回去错误音信(E奇骏_LOCK_WAIT_TIMEOUT)给供给锁的对话,锁状态从PENDING更新为TIMEOUT;

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

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

20rows inset (0.00sec)

·非常多MySQL客户端程序设置的属性值与客户端名称相等的二个program_name属性。例如:mysqladmin和mysqldump分别将program_name连接属性设置为mysqladmin和mysqldump,别的一些MySQL客户端程序还定义了附加属性:

| /data/mysqldata1/undo/undo001
|wait/io/file/innodb/innodb_data_file | 3 |

·socket_summary_by_event_name:针对每一种socket I/O
instruments,这个socket操作相关的操作次数、时间和出殡和埋葬接收字节新闻由wait/io/socket/*
instruments产生(这里的socket是指的最近活跃的连天成立的socket实例)

|
events_stages_summary_by_host_by_event_name |

| socket_summary_by_event_name |

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

·当server中一些代码成立了三个互斥量时,在mutex_instances表中会加多一行对应的互斥体新闻(除非不恐怕再创立mutex
instruments
instance就不会增添行)。OBJECT_INSTANCE_BEGIN列值是互斥体的无与伦比标志属性;

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

| Tables_in_performance_schema (%table%summary%) |

performance_schema完结机制服从以下设计目的:

4 rows in set (0.00 sec)

5rows inset (0.01sec)

session_account_connect_attrs表字段含义:

  1. 提供了一种在数据库运营时实时检查server的里边实市场价格况的艺术。performance_schema
    数据库中的表使用performance_schema存储引擎。该数据库注重关切数据库运维进度中的品质相关的数量,与information_schema不同,information_schema首要关心server运营进程中的元数据消息
  2. performance_schema通过监视server的平地风波来落到实处监视server内部运行状态,
    “事件”正是server内部活动中所做的别的业务以及对应的光阴消耗,利用这个音信来判别server中的相关财富消耗在了哪里?一般的话,事件可以是函数调用、操作系统的等候、SQL语句施行的级差(如sql语句实践进度中的parsing

    sorting阶段)大概全部SQL语句与SQL语句集合。事件的收罗能够低价的提供server中的相关存款和储蓄引擎对磁盘文件、表I/O、表锁等财富的一块调用新闻。
  3. performance_schema中的事件与写入二进制日志中的事件(描述数据修改的events)、事件布置调整程序(那是一种存款和储蓄程序)的风浪不一致。performance_schema中的事件记录的是server执行有个别活动对某个能源的损耗、耗费时间、那些活动进行的次数等情景。
  4. performance_schema中的事件只记录在本地server的performance_schema中,其下的那几个表中数据产生变化时不会被写入binlog中,也不会通过复制机制被复制到别的server中。
  5. 时下活蹦乱跳事件、历史事件和事件摘要相关的表中记录的音信。能提供某些事件的试行次数、使用时间长度。进而可用以深入分析某些特定线程、特定对象(如mutex或file)相关联的运动。
  6. PERFORMANCE_SCHEMA存款和储蓄引擎使用server源代码中的“检查评定点”来完结事件数量的访谈。对于performance_schema完结机制自己的代码未有有关的独门线程来检查评定,那与其余效能(如复制或事件安顿程序)区别
  7. 募集的风浪数量存款和储蓄在performance_schema数据库的表中。那么些表能够行使SELECT语句询问,也足以行使SQL语句更新performance_schema数据库中的表记录(如动态修改performance_schema的setup_*起来的多少个布局表,但要注意:配置表的退换会登时生效,那会潜濡默化多少采撷)
  8. performance_schema的表中的多寡不会悠久化存款和储蓄在磁盘中,而是保存在内部存款和储蓄器中,一旦服务器重启,那么些数量会放任(包蕴配置表在内的总体performance_schema下的装有数据)
  9. MySQL辅助的具备平台南事件监察和控制功用都可用,但分裂平台北用于总括事件时间支出的反应计时器类型也许会具有差异。

网编:

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

·STATEMENT_ID:由server分配的言语内部ID。文本和二进制协议都接纳该语句ID。

|
events_stages_summary_global_by_event_name |

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

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

admin@localhost : performance_schema 09 :34:49> select * from
accounts;

Database changed

| EVENT_NAME |OBJECT_INSTANCE_BEGIN | THREAD_ID |SOCKET_ID | IP
|PORT | STATE |

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

OBJECT_TYPE: TABLE

|
/data/mysqldata1/mydata/mysql/server_cost.ibd
|wait/io/file/innodb/innodb_data_file | 3 |

EVENT_NAME: wait/io/file/innodb/innodb_data_file

|
/data/mysqldata1/innodb_log/ib_logfile1
|wait/io/file/innodb/innodb_log_file | 2 |

| Tables_in_performance_schema (%file_summary%) |

| 0 |

MIN_TIMER_EXECUTE: 0

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

2.表I/O等待和锁等待事件总括

| events_stages_current |

MAX_TIMER_READ: 0

| events_statements_summary_by_digest
|

socket_instances表列出了连年到MySQL
server的外向接连的实时快速照相消息。对于各类连接到mysql
server中的TCP/IP或Unix套接字文件一而再都会在此表中著录一行音讯。(套接字总括表socket_summary_by_event_name和socket_summary_by_instance中提供了有的附加音讯,比方像socket操作以及网络传输和吸取的字节数)。

布局好之后,大家就足以查看server当前正在做哪些,能够透过查询events_waits_current表来获知,该表中各类线程只包涵一行数据,用于呈现每种线程的风靡监视事件(正在做的事务):

…………

| THREAD_ID |EVENT_ID | EVENT_NAME |TIMER_WAIT |

·COUNT_WRITE,SUM_TIMER_WRITE,MIN_TIMER_WRITE,AVG_TIMER_WRITE,MAX_TIMER_WRITE,SUM_NUMBER_OF_BYTES_W科雷傲ITE:那一个列计算了具备发送操作(socket的SEND、SENDTO、SENDMSG类型操作,即以server为参谋的socket写入数据的操作)相关的次数、时间、接收字节数等音信

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

我们先来拜访表中记录的总括消息是怎样样子的。

|Transactions | XA |Savepoints
|

SUM _NUMBER_OF _BYTES_READ: 0

2.4.
performance_schema轻便布署与应用

performance_schema怎么样保管metadata_locks表中记录的剧情(使用LOCK_STATUS列来代表每一个锁的意况):

|
/home/mysql/program/share/english/errmsg.sys
|wait/io/file/sql/ERRMSG

·已予以的锁(显示怎会话具备当前元数据锁);

qogir_env@localhost : performance_schema
04:23:52> SELECT * FROM events_waits_current limit 1G

·EVENT_NAME:生成事件音讯的instruments
名称。与setup_instruments表中的NAME值对应;

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

session_account_connect_attrs表分化意选择TRUNCATE TABLE语句。

| TABLE_NAME |

·当从前诉求不可能立时赢得的锁在那件事后被予以时,其锁音信行状态更新为GRANTED;

SPINS: NULL

OBJECT_NAME: test

|
events_waits_summary_by_user_by_event_name |

SUM_TIMER_WAIT: 412754363625

于今,非常快乐的告知大家,大家依据 MySQL
官方文书档案加上我们的表明,整理了一份能够系统学习 performance_schema
的材质分享给大家,为了方便我们阅读,大家整理为了贰个密密麻麻,一共7篇文章。上边,请随行我们一齐起来performance_schema系统的求学之旅吧。

COUNT_READ: 0

qogir_env@localhost : performance_schema 06:19:20> SELECT
EVENT_NAME,SUM_TIMER_WAIT FROM
events_waits_summary_global_by_event_name

·OBJECT_TYPE:元数据锁子系统中应用的锁类型(类似setup_objects表中的OBJECT_TYPE列值):有效值为:GLOBAL、SCHEMA、TABLE、FUNCTION、PROCEDURE、T奥迪Q3IGGESportage(当前未利用)、EVENT、COMMIT、USECRUISERLEVEL LOCK、TABLESPACE、LOCKING SE科雷傲VICE,USE途乐 LEVEL
LOCK值表示该锁是利用GET_LOCK()函数获取的锁。LOCKING
SE奥迪Q3VICE值表示使用锁服务获得的锁;

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

STATEMENT_NAME: stmt

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

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

| file_summary_by_instance |

注意:rwlock_instances表中的消息只可以查看到持有写锁的线程ID,不过不可能查看到有着读锁的线程ID,因为写锁W福睿斯ITE_LOCKED_BY_THREAD_ID字段记录的是线程ID,读锁唯有一个READ_LOCKED_BY_COUNT字段来记录读锁被某个个线程持有。

蹲点文件系统层调用的表:

|4| _os |linux-glibc2. 5| 0 |

|
/data/mysqldata1/mydata/mysql/help_keyword.ibd
|wait/io/file/innodb/innodb_data_file | 3 |

OBJECT_TYPE: TABLE

instance表记录了如何类型的指标会被检验。这么些指标在被server使用时,在该表元帅会时有发生一条事件记录,举例,file_instances表列出了文本I/O操作及其关联文件名:

socket_instances表不允许行使TRUNCATE TABLE语句。

EVENT_ID: 60

当在server中而且推行的多个线程(比如,同一时候实行查询的八个用户会话)供给拜访同一的能源(举例:文件、缓冲区或有个别数据)时,那七个线程相互竞争,因此首先个成功收获到互斥体的查询将会堵塞其余会话的查询,直到成功博得到互斥体的对话试行到位并释放掉这几个互斥体,其余会话的查询技艺够被施行。

| accounts |

1 row in set (0.00 sec)

使用
INFORMATION_SCHEMA.ENGINES表来查询你的数据库实例是或不是帮忙INFORMATION_SCHEMA引擎

OBJECT _INSTANCE_BEGIN: 139968890586816

|
events_stages_summary_by_thread_by_event_name |

*
COUNT_STAR,SUM_TIMER_WAIT,MIN_TIMER_WAIT,AVG_TIMER_WAIT,MAX_TIMER_WAIT:那么些列计算全数I/O操作数量和操作时间

performance_schema= ON#
注意:该参数为只读参数,要求在实例运维在此之前安装才生效

* _thread:客户端线程ID(仅适用于Windows)

WHERE TABLE_SCHEMA =’performance_schema’andengine=’performance_schema’;

admin@localhost : performance_schema 02:53:40> select * from
file_instances where OPEN_COUNT> 0limit 1;

2.1. 检查当前数据库版本是还是不是帮助

| NULL |41| 45 |

1row inset (0.00sec)

·对此已接受的连日,performance_schema根据performance_schema_session_connect_attrs_size系统变量的值检查总计连接属性大小。固然属性大小超越此值,则会试行以下操作:

87rows inset (0.00sec)

MIN _TIMER_READ: 56688392

业务事件记录表,记录事务相关的事件的表,与话语事件类型的相关记录表类似:

FILE_NAME: /data/mysqldata1/innodb_ts/ibdata1

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

(1)cond_instances表

qogir_env@localhost :
performance_schema 03:13:10>
SHOW VARIABLES LIKE ‘performance_schema’;

·rwlock_instances:wait sync相关的lock对象实例;

| 15 |291|
wait/synch/mutex/innodb/buf_dblwr_mutex |37392|

咱俩先来看看表中著录的总括新闻是哪些样子的。

|
/data/mysqldata1/mydata/mysql/gtid_executed.ibd
|wait/io/file/innodb/innodb_data_file | 3 |

·STATEMENT_NAME:对于二进制协议的说话事件,此列值为NULL。对于文本协议的讲话事件,此列值是用户分配的外表语句名称。举例:PREPARE
stmt FROM’SELECT 1′;,语句名称叫stmt。

……

SUM _TIMER_WAIT: 195829830101250

OPERATION: lock

14 rows inset (0.01 sec)

| setup_consumers |

* _program_name:客户端程序名称

qogir_env@localhost :
performance_schema 03:58:27>
show tables like ‘%file%’;

metadata_locks表字段含义如下:

1row inset (0.00sec)

table_handles表字段含义如下:

近些日子,你能够在performance_schema下利用show
tables语句可能通过查询
INFORMATION_SCHEMA.TABLES表中performance_schema引擎相关的元数据来打听在performance_schema下存在着怎么着表:

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

|
events_waits_summary_by_host_by_event_name |

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

THREAD_ID: 4

·当已予以的锁或挂起的锁乞请被杀死时,其锁状态从GRANTED或PENDING更新为KILLED;

|
events_stages_summary_by_account_by_event_name |

SUM _NUMBER_OF _BYTES_READ: 11567104

|
memory_summary_by_host_by_event_name |

·TOTAL_CONNECTIONS:某主机的总连接数。

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

SUM_WARNINGS: 0

当今,大家早已大致知道了performance_schema中的主要表的归类,但,怎样利用他们来为大家提供应和要求要的天性事件数量吧?下边,大家介绍怎么着通过performance_schema下的安排表来配置与应用performance_schema。

*
如果log_error_verbosity系统变量设置值越过1,则performance_schema还恐怕会将错误音信写入错误日志:

……

6.instance 统计表

| Tables_in_performance_schema
(%transaction%) |

LOCK_STATUS: GRANTED

……

cond_instances表字段含义如下:

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

LOCK_DURATION: TRANSACTION

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

·EXTERNAL_LOCK:在仓库储存引擎等第使用的表锁。有效值为:READ
EXTEEnclaveNAL、W智跑ITE EXTETiggoNAL。

| Engine |Support | Comment

*
复制slave连接的program_name属性值被定义为mysqld、定义了_client_role属性,值为binary_log_listener、_client_replication_channel_name属性,值为坦途名称字符串

| cond_instances |

SUM_TIMER_READ: 0

|PERFORMANCE_SCHEMA | YES
|Performance Schema | NO
|NO | NO |

……

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

accounts表包含连接到MySQL
server的各种account的笔录。对于各类帐户,没个user+host独一标志一行,每行单独计算该帐号的此时此刻连接数和总连接数。server运营时,表的轻重缓急会自动调解。要显式设置表大小,能够在server运维从前设置系统变量performance_schema_accounts_size的值。该种类变量设置为0时,表示禁止使用accounts表的计算新闻成效。

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

·OWNER_EVENT_ID:触发table
handles被张开的事件ID,即持有该handles锁的风浪ID;

ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;

·CURRENT_CONNECTIONS:某帐号的近期连接数;

| events_waits_summary_by_instance
|

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

| Tables_in_performance_schema
(%file%) |

* mysqlbinlog定义了_client_role属性,值为binary_log_listener

performance_schema库下的表能够遵照监视区别的纬度进行了分组,举个例子:或依照分化数据库对象实行分组,或依照不一样的风浪类型实行分组,或在坚守事件类型分组之后,再进一步依据帐号、主机、程序、线程、用户等,如下:

table_lock_waits_summary_by_table表:

| events_waits_current |

| qfsys |10.10. 20.15| 1 |1|

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

· 当行音信中CUQashqaiRENT_CONNECTIONS
字段值为0时,实行truncate语句会删除这么些行;

通过从INFORMATION_SCHEMA.tables表查询有啥performance_schema引擎的表:

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

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

SUM_LOCK_TIME: 0

TIMER_START: 1582395491787124480

3.文本I/O事件总计

qogir_env@localhost :
performance_schema 03:51:36>
show tables like ‘events_statement%’;

(1)accounts表

11rows inset (0.00sec)

OBJECT_SCHEMA: xiaoboluo

|
memory_summary_global_by_event_name |

·TOTAL_CONNECTIONS:某帐号的总连接数(新增加叁个总是累计叁个,不会像当前连接数那样连接断开会收缩)。

方今,是或不是感觉下边包车型地铁牵线内容太过清淡呢?借让你那样想,那就对了,小编当下读书的时候也是这么想的。但后天,对于什么是performance_schema那几个主题材料上,比起更早从前更清楚了啊?假如您还未有希图要扬弃读书本文的话,那么,请随行大家初阶步入到”边走边唱”环节呢!

·users:根据用户名对各个客户端连接举行计算。

下卷将为我们分享”performance_schema之二(配置表详解)”
,多谢您的翻阅,大家不见不散!回来腾讯网,查看更加多

·USELX570:某总是的客户端用户名。纵然是二个里边线程创建的延续,可能是力不可能及印证的用户创立的连天,则该字段为NULL;

| file_summary_by_event_name |

·SOCKET_ID:分配给套接字的内部文件句柄;

| variables_by_thread |

COUNT_STAR: 24

TIMER_WAIT: 65664

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

| Tables_in_performance_schema
(%setup%) |

| table_lock_waits_summary_by_table |#
依据每一种表张开总结的表锁等待事件

终极,简要介绍了performance_schema中由什么表组成,那个表差不离的机能是如何。

OPEN_COUNT:文件当前已开采句柄的计数。假若文件打开然后关门,则张开1次,但OPEN_COUNT列将加一然后减一,因为OPEN_COUNT列只总括当前已开垦的文书句柄数,已关闭的文本句柄会从中减去。要列出server中当前展开的具备文件信息,能够运用where
WHERE OPEN_COUNT> 0子句进行查看。

……

SUM _TIMER_READ: 56688392

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

大家先来拜望表中记录的总计新闻是哪些体统的。

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

[Warning] Connection attributes oflength N were truncated

|13| 2260
|wait/synch/mutex/innodb/buf_pool_mutex | 111264 |

当客户端断开连接时,performance_schema将削减对应连接的行中的CU君越RENT_CONNECTIONS列,保留TOTAL_CONNECTIONS列值。

OBJECT_INSTANCE_BEGIN: 955681576

·TIMER_PREPARE:施行prepare语句小编消耗的岁月。

| 13 |2259|
wait/synch/mutex/innodb/fil_system_mutex |8708688|

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

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

MIN_TIMER_READ_NORMAL: 0

3rows inset (0.01sec)

下边前遭遇那个表分别展开介绍。

| 0 |

·OBJECT_INSTANCE_BEGIN:instruments对象的内部存款和储蓄器地址;

ORDER BY COUNT_STAR DESC LIMIT 10;

· NAME:与condition相关联的instruments名称;

|
events_transactions_summary_by_thread_by_event_name |

|4| _pid |3766| 2 |

| setup_instruments |

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

直接在performance_schema库下采用show
tables语句来查看有怎么着performance_schema引擎表:

| FILE_NAME |EVENT_NAME | OPEN_COUNT |

未来,大家明白了在 MySQL 5.7.17
版本中,performance_schema
下一共有87张表,那么,这87帐表都是寄放在什么数据的吗?我们怎么样选拔他们来询问我们想要查看的多寡吧?先别焦急,大家先来探视这一个表是什么样分类的。

大家先来寻访表中记录的总结音讯是何等样子的。

|
/data/mysqldata1/mydata/mysql/help_relation.ibd
|wait/io/file/innodb/innodb_data_file | 3 |

COUNT_STAR: 802

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

遵守数据库对象名称(库品级对象和表品级对象,如:库名和表名)实行总括的等待事件。遵照OBJECT_TYPE、OBJECT_SCHEMA、OBJECT_NAME列举行分组,依照COUNT_STAR、xxx_TIMER_WAIT字段进行总括。包蕴一张objects_summary_global_by_type表。

| Tables_in_performance_schema
(%statement%) |

| qfsys |1| 1 |

|
events_statements_summary_by_thread_by_event_name |

* _os:操作系统类型(举例Linux,Win64)

12rows inset (0.01sec)

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

5rows inset (0.00sec)

……

……

metadata_locks表不一致意使用TRUNCATE TABLE语句。

主编:

图片 2

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

1 row in set (0.00 sec)

| 4 |348|
wait/io/file/innodb/innodb_log_file |693076224|

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

|导
相当久以前,当自个儿还在品尝着系统地球科学习performance_schema的时候,通过在网络种种寻找资料进行学习,但很可惜,学习的效果并不是很显明,比相当多标称类似
“深入显出performance_schema”
的篇章,基本上皆以这种动不动就贴源码的作风,然后深刻了后来却出不来了。对系统学习performance_schema的功能有限。

大家先来拜望表中著录的计算音讯是怎么样体统的。

……

·COUNT_STAR,SUM_TIMER_WAIT,MIN_TIMER_WAIT,AVG_TIMER_WAIT,MAX_TIMER_WAIT:那几个列总结全部socket读写操作的次数和时间音信

|EVENT_NAME | SUM_TIMER_WAIT |

通过对以下多个表实践查询,能够兑现对应用程序的督察或DBA能够检查评定到事关锁的线程之间的一对瓶颈或死锁音讯:

| events_statements_history |

rwlock_instances表列出了server实践rwlock
instruments时performance_schema所见的具备rwlock(读写锁)实例。rwlock是在代码中应用的协同机制,用于强制在给按期期内线程能够遵从有些准绳访问一些公共财富。能够以为rwlock爱惜着那么些能源不被其余线程随意抢占。访谈情势能够是分享的(多个线程能够同期兼有分享读锁)、排他的(相同的时间独有贰个线程在加以时间足以具有排他写锁)或分享独占的(有个别线程持有排他锁按期,同不日常候允许别的线程实行差别性读)。分享独占访问被称为sxlock,该访谈形式在读写场景下能够增进并发性和可扩展性。

|
memory_summary_by_thread_by_event_name |

6 rows inset (0.00 sec)

|
events_waits_summary_global_by_event_name |

OBJECT _INSTANCE_BEGIN: 2658004160

| setup_objects |

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

|
/home/mysql/program/share/charsets/Index.xml
|wait/io/file/mysys/charset

·当行音信中CU奥德赛RENT_CONNECTIONS
字段值大于0时,执行truncate语句不会删除那个行,TOTAL_CONNECTIONS字段值被重新恢复设置为CU奔驰G级RENT_CONNECTIONS字段值;

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

·OBJECT_NAME:instruments对象的称谓,表品级对象;

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

accounts表字段含义如下:

QueryOK, 0 rowsaffected(0.00sec)

·对于Unix
domain套接字(server_unix_socket)的server端监听器,端口为0,IP为空白;

PS:本种类作品所使用的数据库版本为 MySQL
官方 5.7.17版本

| 3 |_client_name | libmysql |1|

|
events_waits_summary_by_account_by_event_name |

admin@localhost : performance_schema 06:53:42> show tables like
‘%socket%summary%’;

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

·OWNER_EVENT_ID:乞请元数据锁的风云ID。

#
该事件音讯表示线程ID为4的线程正在守候innodb存款和储蓄引擎的log_sys_mutex锁,那是innodb存款和储蓄引擎的一个互斥锁,等待时间为65664皮秒(*_ID列表示事件源于哪个线程、事件编号是有一点点;EVENT_NAME表示检验到的有血有肉的源委;SOURCE表示那一个检查测试代码在哪个源文件中以及行号;电火花计时器字段TIME奇骏_START、TIMER_END、TIMER_WAIT分别表示该事件的上猪时间、停止时间、以及总的耗时,如果该事件正在运作而尚未终结,那么TIME安德拉_END和TIMER_WAIT的值展现为NULL。注:沙漏总结的值是接近值,而不是一丝一毫可信)

PS:MySQL
server使用三种缓存本事通过缓存从文件中读取的新闻来防止文件I/O操作。当然,假设内部存款和储蓄器缺乏时也许内存竞争非常大时也许导致查询作用低下,这一年你可能须求通过刷新缓存或许重启server来让其数据经过文件I/O重回实际不是经过缓存重临。

summary表提供具备事件的集中国国投息。该组中的表以分裂的不二等秘书技聚集事件数量(如:按用户,按主机,按线程等等)。举例:要翻开哪些instruments占用最多的时刻,能够由此对events_waits_summary_global_by_event_name表的COUNT_STAR或SUM_TIMER_WAIT列实行询问(这两列是对事件的记录数实践COUNT(*)、事件记录的TIME本田UR-V_WAIT列执行SUM(TIMER_WAIT)总括而来),如下:

COUNT _READ_WITH _SHARED_LOCKS: 0

|
/data/mysqldata1/innodb_log/ib_logfile0
|wait/io/file/innodb/innodb_log_file | 2 |

作者们先来探视表中著录的总结新闻是何许体统的。

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

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

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

……

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

MIN _TIMER_WAIT: 2971125

[mysqld]

·LOCK_TYPE:元数据锁子系统中的锁类型。有效值为:INTENTION_EXCLUSIVE、SHARED、SHARED_HIGH_PRIO、SHARED_READ、SHARED_WRITE、SHARED_UPGRADABLE、SHARED_NO_WRITE、SHARED_NO_READ_WRITE、EXCLUSIVE;

INDEX_NAME: NULL

SUM _TIMER_READ _WITH_SHARED_LOCKS: 0

2、performance_schema使用便捷入门

| NULL |41| 45 |

|
events_statements_summary_by_account_by_event_name |

·prepare语句预编译:COM_STMT_PREPARE或SQLCOM_PREPARE命令在server中创设一个prepare语句。假若语句检查实验成功,则会在prepared_statements_instances表中新扩张一行。假如prepare语句不恐怕检查测量检验,则会扩张Performance_schema_prepared_statements_lost状态变量的值。

| events_transactions_current |

| 4 |_client_name | libmysql |1|

9rows inset (0.00sec)

·已呼吁但未给予的锁(呈现怎会话正在等待哪些元数据锁);

1 row in set (0.02 sec)

SQL_TEXT: SELECT 1

品级事件记录表,记录语句实施的等第事件的表,与话语事件类型的连锁记录表类似:

·当呼吁元数据锁不能够立时赢得时,将插入状态为PENDING的锁音讯行;

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

·TOTAL_CONNECTIONS:某用户的总连接数。

| setup_actors |

·PS:cond_instances表不允许采用TRUNCATE TABLE语句。

伺机事件记录表,与话语事件类型的相关记录表类似:

那个连接表都允许利用TRUNCATE TABLE语句:

qogir_env@localhost :
performance_schema 02:41:54>
show engines;

(4)rwlock_instances表

原标题:初相识|performance_schema全方位介绍(一)

| wait/synch/mutex/mysys/THR_LOCK_heap |32576832| NULL |

Rowsmatched: 323 Changed: 0 Warnings: 0

·COUNT_READ,SUM_TIMER_READ,MIN_TIMER_READ,AVG_TIMER_READ,MAX_TIMER_READ,SUM_NUMBER_OF_BYTES_READ:那几个列总括全体接受操作(socket的RECV、RECVFROM、RECVMS类型操作,即以server为参照的socket读取数据的操作)相关的次数、时间、接收字节数等消息

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

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

“翻过那座山,你就可以知到一片海”

*
COUNT_WRITE,SUM_TIMER_WRITE,MIN_TIMER_WRITE,AVG_TIMER_WRITE,MAX_TIMER_WRITE,SUM_NUMBER_OF_BYTES_WLANDITE:这一个列计算了富有文件写操作,包罗FPUTS,FPUTC,FP帕杰罗INTF,VFPENVISIONINTF,FWEscortITE和PWTiguanITE系统调用,还包罗了这么些I/O操作的数量字节数

qogir_env@localhost :
performance_schema 06:14:08>
SELECT THREAD_ID,EVENT_ID,EVENT_NAME,TIMER_WAIT FROM
events_waits_history ORDER BY THREAD_ID limit 21;

* _client_version:客户端libmysql库版本

| Tables_in_performance_schema
(%wait%) |

|wait/synch/cond/sql/COND_manager | 31903008 |

|
events_statements_summary_by_host_by_event_name |

·OBJECT_TYPE:显示handles锁的等级次序,表示该表是被哪些table
handles张开的;

qogir_env@localhost: performance_schema 03:34:40> UPDATE setup_instruments SET
ENABLED = ‘YES’, TIMED = ‘YES’where name like ‘wait%’;;

·COUNT_MISC,SUM_TIMER_MISC,MIN_TIMER_MISC,AVG_TIMER_MISC,MAX_TIMER_MISC:那些列总结了富有其余套接字操作,如socket的CONNECT、LISTEN,ACCEPT、CLOSE、SHUTDOWN类型操作。注意:这几个操作未有字节计数

本篇内容到此处就如尾声了,相信广大人都以为,我们大多数时候并不会直接动用performance_schema来查询质量数据,而是利用sys
schema下的视图代替,为啥不直接攻读sys schema呢?那你精通sys
schema中的数据是从何地吐出来的啊?performance_schema
中的数据实际上首要是从performance_schema、information_schema中收获,所以要想玩转sys
schema,全面了然performance_schema不可或缺。别的,对于sys
schema、informatiion_schema以致是mysql
schema,大家后续也会推出差别的连串小说分享给大家。

·INTERNAL_LOCK:在SQL等第使用的表锁。有效值为:READ、READ WITH
SHARED LOCKS、READ HIGH P奥迪RSQ e-tronIO大切诺基ITY、READ NO INSERT、W途锐ITE ALLOW
WWranglerITE、WLANDITE CONCUKoleosRENT INSERT、W科雷傲ITE LOW
P奥迪Q7IO奇骏ITY、WRAV4ITE。有关那么些锁类型的详细音信,请参阅include/thr_lock.h源文件;

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

root@localhost : performance _schema 04:44:00> select * from
socket_summary _by_event_nameG;

|4|
341 |wait/synch/mutex/innodb/fil_system_mutex | 84816 |

STATEMENT_ID: 1

87rows inset (0.00sec)

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

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

* _pid:客户端进程ID

qogir_env@localhost :
performance_schema 03:20:43>
use performance_schema

·cond_instances:wait sync相关的condition对象实例;

出品:沃趣科学和技术

table_io_waits_summary_by_table表:

qogir_env@localhost : performance_schema 03:21:06> show tables from
performance_schema;

套接字instruments具有wait/io/socket/sql/socket_type方式的称谓,如下:

相关文章

发表评论

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

网站地图xml地图