类比的方法学习Performance_schema

引用自:http://www.javacoder.cn/?p=332

MySQL在5.6版本中包含了一个强大的特性——performance-schema,合理的使用这个数据库中的表,能为我们解决一些瓶颈问题提供帮助,但是在我使用的5.6.21版本中,已经包含了52张表,后续还有可能会持续增加,所以搞清楚各个表之间的关系很重要。
1)setup_instruments
使用performance-schema诊断问题的过程类似于医生给病人看病的过程。”setup_instruments”犹如医生能够使用的测量仪器(比如温度计,CT,X光等),在MySQL的官方文档中,使用“instrument”一词来表示,这应该也是这个表的名称的来源。这个表的每一行代表一个”instrument”,”instrument”在MySQL的源码中表示为一段为了测量相应指标的代码。这张表的三个字段分别为“name enabled timed”,enabled表示是否启用该”instrument”, “timed”表示是否对其进行定量的耗时分析。
2)setup_objects
setup_objects类似某类病人(精神病,男科,妇科等),在MySQL中指table, 表示哪些表需要“instrument”,该表的默认值为:
+-------------+--------------------+-------------+---------+-------+
| OBJECT_TYPE | OBJECT_SCHEMA      | OBJECT_NAME | ENABLED | TIMED |
+-------------+--------------------+-------------+---------+-------+
| TABLE       | mysql              | %           | NO      | NO |
| TABLE       | performance_schema | %           | NO      | NO |
| TABLE       | information_schema | %           | NO      | NO |
| TABLE       | %                  | %           | YES     | YES |
+-------------+--------------------+-------------+---------+-------+

表示出了系统表“mysql performance_schema information_schema”外,都需要对其进行“instrument”操作。
3)threads
“threads“类似于某个病人,在MySQL中的某个线程,这个表有一个非常重要的字段”INSTRUMENTED“,表示是否需要对该线程进行”instrument“,这个字段由”setup_actors“表中的内容决定。setup_actors的默认内容如下
+--------+--------+-------+
| HOST   | USER   | ROLE  |
+--------+--------+-------+
| %      | %      | %     |
+--------+--------+-------+

线程分前台线程和后台线程,后台线程指MySQL为了完成任务二自己开启的线程,这样的线程的setup_objects.INSTRUMENTED字段默认为true。前台线程值用户操作而开启的线程。这时如果当前用户匹配setup_actors中的某个记录,那么setup_objects.INSTRUMENTED=true.
threads表的另一个功能是可以代替”show processlist”指令和”information_schema.processlist”表的功能,其不用获取同步的mutex对象,不会又那么重的额外消耗(overhead).

4)setup_consumers
setup_consumers表类似于各种诊断报告是否需要记录的配置,这个表的默认配置为:select * from setup_consumers;
+--------------------------------+---------+
| NAME                           | ENABLED |
+--------------------------------+---------+
| events_stages_current          | NO |
| events_stages_history          | NO |
| events_stages_history_long     | NO |
| events_statements_current      | YES |
| events_statements_history      | NO |
| events_statements_history_long | NO |
| events_waits_current           | NO |
| events_waits_history           | NO |
| events_waits_history_long      | NO |
| global_instrumentation         | YES |
| thread_instrumentation         | YES |
| statements_digest              | YES |
+--------------------------------+---------+

这个表的各个记录还存在层级关系,只有当上级的配置启用时才会考虑下级的配置。
层级关系为:
global_instrumentation
|—-thread_instrumentation
|         |—-events_waits_current
|         |           |-events_waits_history
|         |           |-events_waits_history_long
|         |—-events_stages_current
|         |           |-events_stages_history
|         |           |-events_stages_history_long
|         |—-events_statements_current
|                     |-events_statements_history
|                     |-events_statements_history_long
|—–statements_digest
当global_instrumentation启用时,”thread_instrumentation”和”statements_digest”的配置才有可能生效。其他的配置类推。
只有当”setup_instruments”,”setup_objects”,”setup_consumers“和”threads”都某一项测量指标都启用时才能收集到它的信息。

结束语

对于”statement, stages, waits“这三类统计信息,除了setup_consumers中配置的名称,还有summary版本的统计信息(summary_by_host_by_event_name, summary_by_user_event_name, summary_global_by_event_name)等按照各个维度的统计信息,外加file_instance, mutext_instance, rwlock_instance, table_io_waits_summary_by_index_usage, table_io_waits_summary_by_table,table_lock_waits_summary_by_table,外加一些杂项信息。
由于这些都是基础信息,网上有一个叫做ps_helper的项目,它提供了一些视图,存储过程来简化performence_schema数据库的使用,MySQL官方的GUI工具——MySQL Workbench就含义ps_helper的安装向导入下图,

安装完后会新增一个名为”sys”的数据库,里面会包含一些视图和存储过程,具体的内容可以查看官方文档。

一些不错的资料:
ps_helper官方
MySQL Performance_Schema官网
Using-MySQL-5.6-Performance-Schema-To-Troubleshoot-Typical-Workload-Bottlenecks.pdf

Posted in: MySQL practise

« mysql workbench 没有显示information_schema等系统数据库

spring ApplicationContext配置文件的加载过程 »

时间: 2024-08-10 17:17:19

类比的方法学习Performance_schema的相关文章

[ExtJS学习笔记]第七节 Extjs的组件components及其模板事件方法学习

本文地址:http://blog.csdn.net/sushengmiyan/article/details/38487519 本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源  Sencha Cmd官方网站: http://ww

蒙特卡洛方法学习(二)

之前介绍了蒙特卡洛的优势.详情可参考之前的<蒙特卡洛方法学习(一)>. 那么对于我们设计的电路,对于电路中的元器件参数容差,进行统计分布,用一组伪随机数求得元器件的随机抽样序列,对这些随机抽样得到的元器件参数再对设计的电路进行功能仿真,比如:直流分析,交流分析,瞬态分析等等. 利用Multisim进行蒙特卡洛仿真电路.这里举一个简单的例子,如下:   对于上述电路中,电阻的阻值会有一个容差范围,电容的容值也会有一个容差范围,这些容差会对整个电路带来的影响,可以利用蒙特卡洛方法进行仿真,具体操作

os.wark() 方法学习

脚本: #!/usr/bin/env python # encoding utf-8 import os import types Driver = "d:" # 输出D盘下的所有文件 for  i  in os.walk(Driver + os.sep + "python-study"): print (type(i)) print (i) 输出结果 <class 'tuple'> ('d:\\python-study', [], ['1.txt',

C#中的扩展方法学习总结

??版权声明:本文由秦元培创作和发表,采用署名(BY)-非商业性使用(NC)-相同方式共享(SA)国际许可协议进行许可,转载请注明作者及出处,本文作者为秦元培,本文标题为C#中的扩展方法学习总结,本文链接为http://qinyuanpei.com/2015/12/05/extend-methods-of-csharp/. ??各位朋友大家好,我是秦元培,欢迎大家关注我的博客.最近偶然接触到了C#中的扩展方法,觉得这个语法特性是一个不错的特性,因此决定在这里系统地对C#中的扩展方法相关内容进行下

JavaScript面向对象-静态方法-私有方法-公有方法-特权方法,学习

var baseClass= function(){ function show(){//私有方法 alert("访问私有方法"); } function showName(){ alert(this.name); } this.showw = function (){//特权方法 showName(); } } //静态方法 baseClass.showStatic = function(){ alert("访问静态方法"); } //公有方法 baseClass

JavaScript ES6 数组新方法 学习随笔

JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var includes = arr.includes(2) map方法 map 遍历处理返回新数组 原数组不会改变 var map = arr.map(function (item) { return ++item }) reduce方法 reduce 遍历处理数组返回结果 prev与next中间的符号以

JSON.parse()和JSON.stringify()方法学习

JSON.parse()和JSON.stringify()方法学习 JSON对象中有两个非常好用的方法 JSON.parse接受json字符串转化为JS对象 JSON.stringify接收一个JS对象转化为json字符串 JSON对象与普通对象的区别是JSON对象键值对都必须用双引号 例如: const my={ name:"dylan", age:"18" } let myObj=JSON.stringify(my) console.log(myObj)//&q

zepto.1.1.6.js源码中的each方法学习笔记

each方法接受要遍历的对象和对应的回调函数作为参数,它的作用是: 1.如果要遍历的对象是类似数组的形式(以该对象的length属性值的类型是否为number类型来判断),那么就把以要遍历的对象为执行环境,将回调函数放到该执行环境中去循环执行length次: 2.如果要遍历的对象不类似数组,那么用for key in obj 的方法循环执行回调函数key次,同样以要遍历的对象为执行环境,将回调函数放到该执行环境中去循环执行. function each(elements, callback){

clear 方法学习与分析(清除float的简单几个用法)

自己常用的清除浮动方法以分析 设置了float属性之后,它将本来占据一行的元素,可以并列排在一行里.设置浮动属性,可以向左侧或右侧,浮动的框就因此向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止.由于这样,在设置float时,会造成很多不想要的效果,比如父元素高度不存在了,布局混乱了,因此就需要解决这种情况. 我通常使用两中方法: (1)clear属性分析: 添加额外标签<div style="clear:both"></div>在设置浮动文章里