事件统计 | performance_schema全方位介绍

本文详细介绍了MySQL的performance_schema中的事件统计表,包括等待事件、阶段事件、事务事件、语句事件和内存事件的统计表结构和使用,帮助读者理解如何分析数据库的运行状况和性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

|  导语

在上一篇 《事件记录 | performance_schema全方位介绍"》中,我们详细介绍了performance_schema的事件记录表,恭喜大家在学习performance_schema的路上度过了两个最困难的时期。现在,相信大家已经比较清楚什么是事件了,但有时候我们不需要知道每时每刻产生的每一条事件记录信息, 例如:我们希望了解数据库运行以来一段时间的事件统计数据,这个时候就需要查看事件统计表了。今天将带领大家一起踏上系列第四篇的征程(全系共7个篇章),在这一期里,我们将为大家全面讲解performance_schema中事件统计表。统计事件表分为5个类别,分别为等待事件、阶段事件、语句事件、事务事件、内存事件。下面,请跟随我们一起开始performance_schema系统的学习之旅吧。


|  等待事件统计表

performance_schema把等待事件统计表按照不同的分组列(不同纬度)对等待事件相关的数据进行聚合(聚合统计数据列包括:事件发生次数,总等待时间,最小、最大、平均等待时间),注意:等待事件的采集功能有一部分默认是禁用的,需要的时候可以通过setup_instruments和setup_objects表动态开启,等待事件统计表包含如下几张表:

admin@localhost : performance_schema 06:17:11> show tables like '%events_waits_summary%';
+-------------------------------------------------------+
| Tables_in_performance_schema (%events_waits_summary%) |
+-------------------------------------------------------+
| events_waits_summary_by_account_by_event_name        |
| events_waits_summary_by_host_by_event_name            |
| events_waits_summary_by_instance                      |
| events_waits_summary_by_thread_by_event_name          |
| events_waits_summary_by_user_by_event_name            |
| events_waits_summary_global_by_event_name            |
+-------------------------------------------------------+
6 rows in set (0.00 sec)

     我们先来看看这些表中记录的统计信息是什么样子的。

# events_waits_summary_by_account_by_event_name表
root@localhost : performance_schema 11:07:09> select * from events_waits_summary_by_account_by_event_name limit 1\G
*************************** 1. row ***************************
      USER: NULL
      HOST: NULL
EVENT_NAME: wait/synch/mutex/sql/TC_LOG_MMAP::LOCK_tc
COUNT_STAR: 0
SUM_TIMER_WAIT: 0
MIN_TIMER_WAIT: 0
AVG_TIMER_WAIT: 0
MAX_TIMER_WAIT: 0
1 row in set (0.00 sec)
# events_waits_summary_by_host_by_event_name表
root@localhost : performance_schema 11:07:14> select * from events_waits_summary_by_host_by_event_name limit 1\G
*************************** 1. row ***************************
      HOST: NULL
EVENT_NAME: wait/synch/mutex/sql/TC_LOG_MMAP::LOCK_tc
COUNT_STAR: 0
SUM_TIMER_WAIT: 0
MIN_TIMER_WAIT: 0
AVG_TIMER_WAIT: 0
MAX_TIMER_WAIT: 0
1 row in set (0.00 sec)
# events_waits_summary_by_instance表
root@localhost : performance_schema 11:08:05> select * from events_waits_summary_by_instance limit 1\G
*************************** 1. row ***************************
       EVENT_NAME: wait/synch/mutex/mysys/THR_LOCK_heap
OBJECT_INSTANCE_BEGIN: 32492032
       COUNT_STAR: 0
   SUM_TIMER_WAIT: 0
   MIN_TIMER_WAIT: 0
   AVG_TIMER_WAIT: 0
   MAX_TIMER_WAIT: 0
1 row in set (0.00 sec)
# events_waits_summary_by_thread_by_event_name表
root@localhost : performance_schema 11:08:23> select * from events_waits_summary_by_thread_by_event_name limit 1\G
*************************** 1. row ***************************
 THREAD_ID: 1
EVENT_NAME: wait/synch/mutex/sql/TC_LOG_MMAP::LOCK_tc
COUNT_STAR: 0
SUM_TIMER_WAIT: 0
MIN_TIMER_WAIT: 0
AVG_TIMER_WAIT: 0
MAX_TIMER_WAIT: 0
1 row in set (0.00 sec)
# events_waits_summary_by_user_by_event_name表
root@localhost : performance_schema 11:08:36> select * from events_waits_summary_by_user_by_event_name limit 1\G
*************************** 1. row ***************************
      USER: NULL
EVENT_NAME: wait/synch/mutex/sql/TC_LOG_MMAP::LOCK_tc
COUNT_STAR: 0
SUM_TIMER_WAIT: 0
MIN_TIMER_WAIT: 0
AVG_TIMER_WAIT: 0
MAX_TIMER_WAIT: 0
1 row in set (0.00 sec)
# events_waits_summary_global_by_event_name表
root@localhost : performance_schema 11:08:53> select * from events_waits_summary_global_by_event_name limit 1\G
*************************** 1. row ***************************
EVENT_NAME: wait/synch/mutex/sql/TC_LOG_MMAP::LOCK_tc
COUNT_STAR: 0
SUM_TIMER_WAIT: 0
MIN_TIMER_WAIT: 0
AVG_TIMER_WAIT: 0
MAX_TIMER_WAIT: 0
1 row in set (0.00 sec)

从上面表中的示例记录信息中,我们可以看到:

每个表都有各自的一个或多个分组列,以确定如何聚合事件信息(所有表都有EVENT_NAME列,列值与setup_instruments表中NAME列值对应),如下: 

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

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

events_waits_summary_by_instance表:按照列EVENT_NAME、OBJECT_INSTANCE_BEGIN进行分组事件信息。如果一个instruments(event_name)创建有多个实例,则每个实例都具有唯一的OBJECT_INSTANCE_BEGIN值,因此每个实例会进行单独分组 

events_waits_summary_by_thread_by_event_name表:按照列THREAD_ID、EVENT_NAME进行分组事件信息 

events_waits_summary_by_user_by_event_name表:按照列EVENT_NAME、USER进行分组事件信息 

events_waits_summary_global_by_event_name表:按照EVENT_NAME列进行分组事件信息

所有表的统计列(数值型)都为如下几个: 

COUNT_STAR:事件被执行的数量。此值包括所有事件的执行次数,需要启用等待事件的instruments 

SUM_TIMER_WAIT:统计给定计时事件的总等待时间。此值仅针对有计时功能的事件instruments或开启了计时功能事件的instruments,如果某事件的instruments不支持计时或者没有开启计时功能,则该字段为NULL。其他xxx_TIMER_WAIT字段值类似 

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

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

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

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

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

对于未按照帐户、主机、用户聚合的统计表,truncate语句会将统计列值重置为零,而不是删除行。

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

此外,按照帐户、主机、用户、线程聚合的每个等待事件统计表或者events_waits_summary_global_by_event_name表,如果依赖的连接表(accounts、hosts、users表)执行truncate时,那么依赖的这些表中的统计数据也会同时被隐式truncate 。

注意:这些表只针对等待事件信息进行统计,即包含setup_instruments表中的wait/%开头的采集器+ idle空闲采集器,每个等待事件在每个表中的统计记录行数需要看如何分组(例如:按照用户分组统计的表中,有多少个活跃用户,表中就会有多少条相同采集器的记录),另外,统计计数器是否生效还需要看setup_instruments表中相应的等待事件采集器是否启用。


|  阶段事件统计表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值