自MySQL 5.5开始,一个名为PERFORMANCE_SCHEMA的数据库被引入,主要用于收集数据库服务器的性能参数。这个库中的表存储引擎均为PERFORMANCE_SCHEMA,用户不能直接创建使用此存储引擎的表。在performance_schema中,事件统计表分为5个类别:等待事件、阶段事件、语句事件、事务事件和内存事件。
它具有以下特点:
1) 提供了一种在数据库运行时实时检查server内部执行情况的方法。performance_schema数据库中的表使用performance_schema存储引擎,专注于数据库运行过程中的性能相关数据,与主要关注server元数据信息的information_schema不同。
2) 通过监视server的事件实现监视server内部运行情况,这些“事件”是server内部活动及对应的时间消耗,帮助判断资源消耗情况。事件可以是函数调用、操作系统等待、SQL语句执行阶段(如parsing或sorting阶段)或整个SQL语句。
3) 与写入二进制日志中的事件和事件计划调度程序中的事件不同,performance_schema中的事件记录的是server执行某些活动对资源的消耗、耗时、执行次数等情况。
4) performance_schema中的事件只记录在本地server的performance_schema中,数据变化不会被写入binlog中,也不会通过复制机制复制到其他server。
5) 提供了当前活跃事件、历史事件和事件摘要相关的表,可以分析特定线程、对象(如mutex或file)的活动。
6) 使用server源代码中的“检测点”来实现事件数据的收集,不需要单独的检测线程。
7) 收集的事件数据存储在performance_schema数据库的表中,可以使用SELECT语句查询,也可以用SQL语句更新(注意:配置表更改会立即生效)。
8) performance_schema中的数据不持久化存储,重启后数据会丢失。
9) 在所有支持的平台中,事件监控功能都可用,但计时器类型可能有所不同。
performance_schema遵循以下设计目标:
1)启用performance_schema不会对server的行为产生影响,如线程调度机制、查询执行计划。
2)持续监测,开销小,不会导致server不可用。
3)不增加新的关键字或语句,解析器不会变化。
4)即使内部对某事件执行监测失败,也不会影响server正常运行。
5)事件数据的收集是持续不断的过程,检索只在需要查看时才进行。
6)可以很容易地添加新的监测点。
7)监测点代码版本化,旧代码可以继续工作。
注意:MySQL sys schema是一组对象(包括相关的视图、存储过程和函数),可以方便地访问performance_schema收集的数据,检索的数据可读性更高。
instruments:用于采集MySQL中各种操作产生的事件信息,对应的配置项称为监控采集配置项。
consumers:用于存储来自instruments采集的数据,对应的配置项称为消费存储配置项。
performance_schema库下的表可以按照不同纬度进行分组,例如按数据库对象、事件类型分组,或进一步按帐号、主机、程序、线程、用户等分组。
5.1、打开performance_schema
在5.7.x及其以上版本中,performance_schema默认启用。在5.6.x及其以下版本中,默认关闭。如果需要显式启用或关闭,可以在my.cnf中设置:
[mysqld]
performance_schema = ON # 注意:该参数为只读参数,需要在实例启动之前设置才生效
5.2、配置instruments
数据库初始化启动时,并非所有instruments和consumers都启用。在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操作的instruments
wait/io/table/sql/handler:与表I/O操作相关的instruments
wait/lock:锁操作相关的instruments
wait/synch:磁盘同步对象相关的instruments
5.2.2、推荐配置
my.cnf参考配置:
performance-schema=on
performance-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'
performance-schema-consumer-events_stages_current=on
performance-schema-consumer-events_stages_history=on
performance_schema_events_stages_history_size=30
performance-schema-consumer-events_stages_history_long=on
performance_schema_events_statements_history_long_size=10000
performance-schema-consumer-events_statements_current=on
performance-schema-consumer-events_statements_history=on
performance_schema_events_statements_history_size=30
performance-schema-consumer-events_statements_history_long=on
performance_schema_events_statements_history_long_size=10000
performance-schema-consumer-events_waits_current=on
performance-schema-consumer-events_waits_history=on
performance_schema_events_statements_history_size=30
performance-schema-consumer-events_waits_history_long=on
performance_schema_events_waits_history_long_size=10000
performance-schema-consumer-statements_digest=on
后续将分享更多关于devops和DBA的内容,感兴趣的朋友请持续关注。
转载请注明来自广州玛斯顿影音有限公司,本文标题:《mysql事件统计之PERFORMANCE_SCHEMA基础详解 》