启用performance schema

在MySQL 5.6.6版本后,performance schema被默认打开
通常MySQL的二进制版本都默认支持PS,
如果使用编译源码安装,在cmake时需要使用参数DWITH_PERFSCHEMA_STORAGE_ENGINE=1来支持PS performance schema 是以存储引擎的方式实现的,因此可以使用以下两种方式确定PS是否可用
## 检查方式1
SELECT *
FROM INFORMATION_SCHEMA.ENGINES
WHERE ENGINE='PERFORMANCE_SCHEMA'\G ## 检查方式2
show engines \G 在MySQL配置文件中,可以使用performance_schema=ON来设置自动启用并初始化performance schema
performance schema初始化完成后,可以像访问正常数据库一样使用performance_schema库。

配置performance schema

##=============================================================================##
performance_schema库中以setup为前缀的表存放相关配置信息:
setup_actors:配置用户纬度的监控,默认监控所有用户。
setup_consumers:配置events的消费者类型,即收集的events写入到哪些统计表中。
setup_instruments:配置具体的instrument,主要包含4大类:idle、stage/xxx、statement/xxx、wait/xxx:
setup_objects:配置监控对象,默认对mysql,performance_schema和information_schema中的表都不监控,而其它DB的所有表都监控。
setup_timers:配置每种类型指令的统计时间单位。MICROSECOND表示统计单位是微妙,CYCLE表示统计单位是时钟周期,时间度量与CPU的主频有关,NANOSECOND表示统计单位是纳秒。但无论采用哪种度量单位,最终统计表中统计的时间都会装换到皮秒。(1秒=1000000000000皮秒) ##=============================================================================##
更新表setup_consumers中数据后会立即生效,但不会持久化保存,
因此如果需要永久生效,需要在配置文件中进行配置,如:
[mysqld]
#performance_schema
performance_schema_consumer_events_waits_current=on
performance_schema_consumer_events_stages_current=on
performance_schema_consumer_events_statements_current=on
performance_schema_consumer_events_waits_history=on
performance_schema_consumer_events_stages_history=on
performance_schema_consumer_events_statements_history=on performance_schema_consumer_XX存在层级关系,当上层被禁用后,即使下层开启,仍无法生效。
表setup_consumers里面的值有个层级关系:
LEVEL1: global_instrumentation
LEVEL2: thread_instrumentation,statements_digest
LEVEL3: events_stages_current,events_statements_current,events_waits_current
LEVEL4: events_stages_history,events_statements_history,events_waits_history
LEVEL5: events_stages_history_long,events_statements_history_long,events_waits_history_long
以_current后缀的存放当前事件信息,
以_history和_history_long为后缀的表存放的是_current表的历史记录,
_history表默认存放最近等待的10个事件,而_history_long默认存放最近1000个等待事件 _history表存放等待事件的数量可以通过参数来控制:
SHOW VARIABLES LIKE 'performance_schema%history%size'; ##=============================================================================##
当PS启用后,并不是所有事件都会收集,可以查看setup_instruments表来查看那些事件被收集。
SELECT *
FROM setup_instruments; 参考:https://dev.mysql.com/doc/refman/5.6/en/setup-instruments-table.html 对于setup_instruments表中记录,只有当ENABLED和ENABLED同时被激活状态下,才会收集事件 setup_instruments表中包含4大类数据:idle、stage/xxx、statement/xxx、wait/xxx.
idle表示socket空闲的时间,
stage类表示语句的每个执行阶段的统计,
statement类统计语句维度的信息,
wait类统计各种等待事件,比如IO,mutux,spin_lock,condition等。
##=============================================================================## 参考连接:
http://www.cnblogs.com/zhoujinyi/p/5236705.html
http://keithlan.github.io/2015/07/17/22_performance_schema/

performance schema对象

##=============================================================================##
cond_instances:条件等待对象实例
表中记录了系统中使用的条件变量的对象,OBJECT_INSTANCE_BEGIN为对象的内存地址。 ##=============================================================================##
file_instances:文件实例
表中记录了系统中打开了文件的对象,包括ibdata文件,redo文件,binlog文件,用户的表文件等,open_count显示当前文件打开的数目,如果重来没有打开过,不会出现在表中。 ## 查看打开次数较高的文件
SELECT *
FROM file_instances
ORDER BY OPEN_COUNT DESC
LIMIT 10\G ##=============================================================================##
mutex_instances:互斥同步对象实例
表中记录了系统中使用互斥量对象的所有记录,其中name为:wait/synch/mutex/*。
LOCKED_BY_THREAD_ID显示哪个线程正持有mutex,若没有线程持有,则为NULL。 ##=============================================================================##
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的缺陷是,只能记录持有写锁的线程,对于读锁则无能为力。 ##=============================================================================##
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

performance schema表

##=============================================================================##
wait相关表
1.events_waits_current:记录了当前线程等待的事件
2.events_waits_history:记录了每个线程最近等待的10个事件
3.events_waits_history_long:记录了最近所有线程产生的10000个事件 ##=============================================================================##
stage相关表
1.events_stages_current:记录了当前线程所处的执行阶段
2.events_stages_history:记录了当前线程所处的执行阶段10条历史记录
3.events_stages_history_long:记录了当前线程所处的执行阶段10000条历史记录 ##=============================================================================##
Statement相关表
1.events_statements_current:通过 thread_id+event_id可以唯一确定一条记录。
Statments表只记录最顶层的请求,SQL语句或是COMMAND,每条语句一行。
event_name形式为statement/sql/*,或statement/com/* 2.events_statements_history
3.events_statements_history_long ##=============================================================================##
Connection相关表
1.users:记录用户连接数信息
2.hosts:记录了主机连接数信息
3.accounts:记录了用户主机连接数信息 ##=============================================================================##
Summary 表: Summary表聚集了各个维度的统计信息包括表维度,索引维度,会话维度,语句维度和锁维度的统计信息
1,events_waits_summary_global_by_event_name:按等待事件类型聚合,每个事件一条记录
2,events_waits_summary_by_instance:按等待事件对象聚合,同一种等待事件,可能有多个实例,每个实例有不同的内存地址,因此
event_name+object_instance_begin唯一确定一条记录。
3,events_waits_summary_by_thread_by_event_name:按每个线程和事件来统计,thread_id+event_name唯一确定一条记录。
4,events_stages_summary_global_by_event_name:按事件阶段类型聚合,每个事件一条记录,表结构同上。
5,events_stages_summary_by_thread_by_event_name:按每个线程和事件来阶段统计,表结构同上。
6,events_statements_summary_by_digest:按照事件的语句进行聚合。
7,events_statements_summary_global_by_event_name:按照事件的语句进行聚合。表结构同上。
8,events_statements_summary_by_thread_by_event_name:按照线程和事件的语句进行聚合,表结构同上。
9,file_summary_by_instance:按事件类型统计(物理IO维度)
10,file_summary_by_event_name:具体文件统计(物理IO维度)
11,table_io_waits_summary_by_table:根据wait/io/table/sql/handler,聚合每个表的I/O操作(逻辑IO纬度)
12,table_io_waits_summary_by_index_usage:与table_io_waits_summary_by_table类似,按索引维度统计
13,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 14,Connection Summaries表:account、user、host
15,socket_summary_by_instance、socket_summary_by_event_name:socket聚合统计表。

MySQL--performance schema学习的更多相关文章

  1. MySQL Performance Schema详解

    MySQL的performance schema 用于监控MySQL server在一个较低级别的运行过程中的资源消耗.资源等待等情况. 1 performance schema特点 提供了一种在数据 ...

  2. mysql performance schema的即时诊断工具-邱伟胜

    https://github.com/noodba http://www.noodba.com

  3. [MySQL Reference Manual] 23 Performance Schema结构

    23 MySQL Performance Schema 23 MySQL Performance Schema 23.1 性能框架快速启动 23.2 性能框架配置 23.2.1 性能框架编译时配置 2 ...

  4. MySQL 5.7 Performance Schema 详解

    refman mysql 5.7 MySQL Performance Schema  用于监视MySQL服务器,且运行时消耗很少的性能.Performance Schema 收集数据库服务器性能参数, ...

  5. MySQL sys Schema 简单介绍-1

    参考文档: MySQL- 5.7 sys schema笔记 MySQL 5.7新特性:SYS库详解 MySQL Performance Schema&sys Schema介绍 内存分配统计视图 ...

  6. Mysql之performance Schema

    Performance schema是用于监控Mysql执行,具有如下特征: 1.用于在运行时探查Mysql Server的执行过程,是由Performance_schema引擎和 Performan ...

  7. Profiling MySQL queries from Performance Schema

    转自:http://www.percona.com/blog/2015/04/16/profiling-mysql-queries-from-performance-schema/ When opti ...

  8. 学习笔记:Analyze MySQL Performance及慢日志的开启

    Table of Contents Analyze MySQL PerformanceTuningSlow queries and Slowlog Brought to you by Rick Jam ...

  9. MySQL调优性能监控之performance schema

    一.performance_schema的介绍 performance:性能 schema:图(表)示,以大纲或模型的形式表示计划或理论. MySQL的performance schema 用于监控M ...

  10. MySQL 5.6学习笔记(数据库基本操作,查看和修改表的存储引擎)

    1. 数据库基本操作 1.1  查看数据库 查看数据库列表: mysql> show databases; +--------------------+ | Database | +------ ...

随机推荐

  1. Ubuntu下Thunderbird设置

    安装 apt-get install thunderbird(software) thunderbird-locale-zh-cn(汉化包) 添加最小化插件 附加组件里安装 MinimizeToTra ...

  2. datatime模块的使用

    dt_now = datetime.datetime.now()print(dt_now)# 2019-05-09 14:44:32.555337 获取日期,不含时分秒today = dt_now.d ...

  3. 剑指offer 面试题8:二叉树的下一个节点

    题目:给定一棵二叉树和其中一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左.右节点的指针,还有一个节点指向父节点的指针. 中序遍历序列是{d,b,h,e,i,a,f,c,g} ...

  4. java信号量

    维基百科解释的信号量概念如下 信号量(英语:semaphore)又称为信号标,是一个同步对象,用于保持在0至指定最大值之间的一个计数值.当线程完成一次对该semaphore对象的等待(wait)时,该 ...

  5. 紧随时代的步伐--Java8特性之接口默认方法

    1.关于Java8 自从1996年Sun公司发布Java以来,Java到目前为止已经走过21个年头,每一次的升级,都是Java语言的革新,对时代发展的适应.2014年Oracle发布Java8,而据可 ...

  6. 使用PhantomJS后台web界面截图

    自动化截web页面的图 一.工具介绍: PhantomJS是一个基于webkit的JavaScript API.它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaSc ...

  7. 正方教务系统客户端 error loading midas.dll.

    在windows xp/7/10上安装了客户端,安装到注册字体一步,没有响应,强行结束.启动客户端,登录,出现  error loading midas.dll. 32位:先将 midas.dll 放 ...

  8. 爬虫(一)基础知识(python)

    1.1 定义 网络爬虫,也叫网络蜘蛛(Web Spider),如果把互联网比喻成一个蜘蛛网,Spider就是一只在网上爬来爬去的蜘蛛.网络爬虫就是根据网页的地址来寻找网页的,也就是URL.举一个简单的 ...

  9. kali 更改图标村大小

    1.“设置” --> "通用辅助功能" --> "大号字体" 2.在终端中输入 “gnome-tweaks” 打开 优化 --> 扩展  -- ...

  10. NFS服务器安装测试

    NFS为网络文件系统,允许网络中的计算机通过TCP/IP协议进行网络资源共享. 软件安装: $ sudo apt-get install nfs-kernel-server (1)服务器端 1)创建共 ...