mysql 事件统计_mysql事件统计之PERFORMANCE_SCHEMA基础详解

概述

MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。performance_schema中事件统计表。统计事件表分为5个类别,分别为等待事件、阶段事件、语句事件、事务事件、内存事件。

1、performance_schema特点

它具有以下特点:

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支持的所有平台中事件监控功能都可用,但不同平台中用于统计事件时间开销的计时器类型可能会有所差异。

2、performance_schema实现机制

performance_schema遵循以下设计目标:

1)启用performance_schema不会导致server的行为发生变化。例如,它不会改变线程调度机制,不会导致查询执行计划(如EXPLAIN)发生变化

2)启用performance_schema之后,server会持续不间断地监测,开销很小。不会导致server不可用

3)在该实现机制中没有增加新的关键字或语句,解析器不会变化

4)即使performance_schema的监测机制在内部对某事件执行监测失败,也不会影响server正常运行

5)如果在开始收集事件数据时碰到有其他线程正在针对这些事件信息进行查询,那么查询会优先执行事件数据的收集,因为事件数据的收集是一个持续不断的过程,而检索(查询)这些事件数据仅仅只是在需要查看的时候才进行检索。也可能某些事件数据永远都不会去检索

6)需要很容易地添加新的instruments监测点

7)instruments(事件采集项)代码版本化:如果instruments的代码发生了变更,旧的instruments代码还可以继续工作。

注意:MySQL sys schema是一组对象(包括相关的视图、存储过程和函数),可以方便地访问performance_schema收集的数据。同时检索的数据可读性也更高(例如:performance_schema中的时间单位是皮秒,经过sys schema查询时会转换为可读的us,ms,s,min,hour,day等单位),sys schem在5.7.x版本默认安装

3、基本概念

instruments:生产者,用于采集MySQL 中各种各样的操作产生的事件信息,对应配置表中的配置项我们可以称为监控采集配置项,以下提及生产者均统称为instruments

consumers:消费者,对应的消费者表用于存储来自instruments采集的数据,对应配置表中的配置项我们可以称为消费存储配置项,以下提及消费者均统称为consumers

4、performance_schema表的分类

performance_schema库下的表可以按照监视不同的纬度进行分组,例如:或按照不同数据库对象进行分组,或按照不同的事件类型进行分组,或在按照事件类型分组之后,再进一步按照帐号、主机、程序、线程、用户等

mysql 事件统计_mysql事件统计之PERFORMANCE_SCHEMA基础详解_第1张图片

mysql 事件统计_mysql事件统计之PERFORMANCE_SCHEMA基础详解_第2张图片

mysql 事件统计_mysql事件统计之PERFORMANCE_SCHEMA基础详解_第3张图片

mysql 事件统计_mysql事件统计之PERFORMANCE_SCHEMA基础详解_第4张图片

5、performance_schema管理

5.1、打开performance_schema

performance_schema在5.7.x及其以上版本中默认启用(5.6.x及其以下版本默认关闭),如果要显式启用或关闭时,我们需要使用参数performance_schema=ON|OFF设置,并在my.cnf中进行配置:

[mysqld]performance_schema = ON # 注意:该参数为只读参数,需要在实例启动之前设置才生效

5.2、performance_schema配置instruments

数据库刚刚初始化并启动时,并非所有instruments(事件采集项,在采集项的配置表中每一项都有一个开关字段,或为YES,或为NO)和consumers(与采集项类似,也有一个对应的事件类型保存表配置项,为YES就表示对应的表保存性能数据。

5.2.1、setup_instruments表中顶级instruments 组件分类如下:

1)Idle 组件(1个)

2)transaction 组件(1个)

3)Memory 组件(377个),默认情况下禁用了大多数memory instruments

4)Stage Instrument 组件(129个)

5)Statement Instrument 组件(193个)

6)Wait Instrument 组件(319个),包含如下几个子类

wait/io:用于检测I/O操作的instrumentswait/io/table/sql/handler:与表I/O操作相关的instrumentswait/lock:锁操作相关的instruments wait/synch:磁盘同步对象相关的instruments

5.2.2、推荐配置

my.cnf参考如下配置:

#监控performance_schema=onperformance-schema-instrument='wait/io/file/%=on'performance-schema-instrument='wait/io/table/%=on'performance-schema-instrument='statement/com/%=on'performance-schema-instrument='statement/sql/%=on'performance-schema-instrument='stage/sql/%=on'performance-schema-instrument='memory/%=on'# 注:只有current=on,performance_schema才会检查是否需要填充到history和long history中,后两者没有关系,均依赖于current,因此current必须无条件启用performance-schema-consumer-events_stages_current=on# performance-schema-consumer-events_stages_history=on# performance_schema_events_stages_history_size=30performance-schema-consumer-events_stages_history_long=onperformance_schema_events_statements_history_long_size=10000performance-schema-consumer-events_statements_current=on# performance-schema-consumer-events_statements_history=on# performance_schema_events_statements_history_size=30performance-schema-consumer-events_statements_history_long=onperformance_schema_events_statements_history_long_size=10000performance-schema-consumer-events_waits_current=on# performance-schema-consumer-events_waits_history=on# performance_schema_events_statements_history_size=30performance-schema-consumer-events_waits_history_long=onperformance_schema_events_waits_history_long_size=10000performance-schema-consumer-statements_digest=on

后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下~

mysql 事件统计_mysql事件统计之PERFORMANCE_SCHEMA基础详解_第5张图片

你可能感兴趣的:(mysql,事件统计)