MySql主要性能指标说明
在项目当中数据库一般都会成为主要的性能与负载瓶颈,那么针对数据库各项性能指标的监控与对应的优化是开发与运维人员需要面对的主要工作,而且这部分的工作会贯穿项目从开发到运行的整个周期里。
这篇文章中我们对MySql数据库中的几个主要的性能指标的计算与统计进行下说明与总结。
在MySql中通过show global status可以得到很多的性能指标项,从中我们可以可以抽取需要关注的指标项:
1、CPU、内存使用率、磁盘占用空间
CPU、内存、磁盘这三项是我们能够看到的最直观的指标,也是MySql运行状态的整体体现,一旦我们的数据库服务器这三项出现不正常的波动,必然会影响项目的稳定与性能,从而就需要我们对项目与MySql进行合理配置与优化。
2 、创建的连接数、连接的连接数、连接缓存数、连接活跃数
Threads_created:
通过show global status like "Threads_created"可以查看已经创建的连接数,这个顾名思义就是MySql已经创建的总连接数;
Threads_connectd:
通过show global status like "Threads_connectd"可以查看已经连接的连接数,这个值等于show processlist;
Threads_catched:
通过show global status like "Threads_catched"可以查看当前MySql当前缓存的连接数,我们知道MySql建立连接非常消耗资源,当已有连接不再使用之后,MySql不会直接断开连接,而是将连接缓存到缓存池中,以便下次在有create thread的需求时,从而达到复用连接,提高性能的目标,所以Threads_catched中的值就是当前缓存池中可用连接数量,由此我们可以得出 Threads_created的值应该是Threads_connectd与Threads_catched之和, 当然如果已经有了中间件或者其他的连接池管理,那么这个参数就没有那么重要了,但是如果没有其他的连接池管理,那么优化这个参数还是有一定必要的。
Threads_running:
通过show global status like "Threads_running"可以查看当前活跃的连接数,这个值代表处于当前激活状态的连接线程个数,这个值必定是小于Threads_connectd的。
3、IOPS、QPS、TPS
IOPS:(Input/Output operations Per Second,既每秒处理I/O的请求次数)
我们知道数据库的处理本质上是IO的读写处理,你可以简单的把IOPS理解为存储介质(一般是磁盘)在单位时间内能处理的IO读写请求数量,因为所有对MySql数据库的访问与操作最后都会落在对磁盘的读写上,那么IOPS的数值越高自然在一定时间内能接受的数据库处理请求就越多,IOPS的计算公式:IOPS=1000ms/(寻道时间+旋转延迟时间),可以看到这个指标的计算跟你存储介质的性能是息息相关的,所以把普通机械硬盘替换为SSD固态硬盘是提高MySql处理能力的一种比较有效的手段。
QPS(Query Per Second,既每秒请求查询次数)
QPS是MySql数据库的一个十分重要指标,它代表MySql数据库每秒接收的请求查询次数,我们可以通过show global status like "Questions" 来查看数据库当前的Questions也就是查询请求的次数,但要注意的是这个值是一个全局的累计值,也就是自MySql服务启动后所有查询次数。如果我们计算的是数据库服务QPS性能的一个均值,可以直接采用下面的计算方式:
questions = show global status like "questions"; -- MySql启动后查询请求的总数量 uptimes = show global status like "uptime"; -- MySql本次启动后的运行时间(单位:秒) QPS = questions/uptimes
如果你要计算的是系统峰值时QPS指标,这就需要我们手动去计算了,我们可以相隔单位时间通过show global status like "Questions"命令查询下这个值,并将相邻的两值相减除以相隔的时间,得到的就是精确的每一秒的实际请求数了。
TPS(Transcantion Per Second,既每秒事务数)
既然是每秒事务数据,在InnoDB引擎下才会有这个指标数据,TPS涉及到事务的提交与回滚,所以计算TPS时需要把show global status like "Com_commit" 与 show global status like "Com_rollback",计算方法同样需要我们每间隔一段时间进行一次采样,然后把Com_commit与Com_rollback值相加除以单位时间就是TPS值了,公式如下:
commit = show global status like "Com_commit"; rollback = show global status like "Com_rollback"; TPS= (commit+rollback)/seconds(单位时间,单位:秒)
4、InnoDB缓存读命中率、使用率、脏块率(%)
在MySql的使用中,由于InnoDB引擎的优点与特性,我们一般都会选择其做为MySql的数据引擎,InnoDB拥有的缓存特性可以很大程度的提高MySql的查询性能,因为Innodb 不仅仅缓存索引,同时还会缓存实 际的数据,通过配置我们可以在Innodb 存储引擎中使用更多的内存来缓存数据,那么在这个过程中其缓存的命中率、使用率与脏块率必然是重要的性能指标。
关于Innodb有很多参数指标:
//innodb文件读写次数 innodb_data_reads:innodb平均每秒从文件中读取的次数 innodb_data_writes:innodb平均每秒从文件中写入的次数 innodb_data_fsyncs:innodb平均每秒进行fsync()操作的次数 //innodb读写量 innodb_data_read:innodb平均每秒钟读取的数据量,单位为KB innodb_data_written:innodb平均每秒钟写入的数据量,单位为KB //innodb缓冲池状态 innodb_buffer_pool_reads: 平均每秒从物理磁盘读取页的次数 innodb_buffer_pool_read_requests: 平均每秒从innodb缓冲池的读次数(逻辑读请求数) innodb_buffer_pool_write_requests: 平均每秒向innodb缓冲池的写次数 innodb_buffer_pool_pages_dirty: 平均每秒innodb缓存池中脏页的数目 innodb_buffer_pool_pages_flushed: 平均每秒innodb缓存池中刷新页请求的数目
而InnoDB缓存读命中率、使用率、脏块率(%)主要就是根据上面参数计算出来的
innodb缓冲池的读命中率 = ( 1 - Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests) * 100
Innodb缓冲池的利用率 = ( 1 - Innodb_buffer_pool_pages_free / Innodb_buffer_pool_pages_total) * 100
Innodb缓冲池的脏块的百分率 = (innodb_buffer_pool_pages_dirty / innodb_buffer_pool_pages_total) * 100
5. 网络流量(平均每秒的输入输出量)
MySql数据的网络流量监控可通过计算单位时间内Bytes_received与Bytes_sent获取。
Bytes_received/s:平均每秒从所有客户端接收到的字节数,单位KB
Bytes_sent/s:平均每秒发送给所有客户端的字节数,单位KB
6、MySql中InnoDB引擎每秒钟查询次数、插入次数、删除次数、更新次数的统计
MySql数据库全局的查询、插入、删除、更新次数可通过show global status like "%innodb_rows%"命令来查看,而计算单位时间内的上述各项指标即可获取InnoDB引擎每秒钟查询次数、插入次数、删除次数、更新次数
InnoDB引擎每秒钟查询次数 = Innodb_rows_read/s
InnoDB引擎每秒钟插入次数 = Innodb_rows_inserted/s
InnoDB引擎每秒钟删除次数 = Innodb_rows_deleted/s
InnoDB引擎每秒钟删除次数 = Innodb_rows_updated/s
以上就是MySql数据库中一些主要性能指标的计算与统计方式,监控与统计这些性能指标,一方面可以对MySql数据库的运行状态进行监控,另一方面也可以通过某性能指标的异常查找与定位问题所在,希望对大家项目中MySql数据库的使用有所帮助,其中如有不足与不正确的地方还望指出与海涵。
关注微信公众号,查看更多技术文章。

MySql主要性能指标说明的更多相关文章
- MySQL的性能指标计算和优化方法
		
MySQL的性能指标计算和优化方法1 QPS计算(每秒查询数) 针对MyISAM引擎为主的DB mysql> show global status like 'questions';+----- ...
 - MySQL性能指标及计算方法
		
绝大多数MySQL性能指标可以通过以下两种方式获取: (1)mysqladmin 使用mysqladmin extended-status命令获得的MySQL的性能指标,默认为累计值.如果想了解当前状 ...
 - MySQL性能指标及计算方法(go)
		
绝大多数MySQL性能指标可以通过以下两种方式获取: (1)mysqladmin 使用mysqladmin extended-status命令获得的MySQL的性能指标,默认为累计值.如果想了解当前状 ...
 - MySQL几个性能指标
		
近期参加了一个DBA MySQL的分享,主要从MySQL的性能指标分析.同步及运维三个方面分享一些经验,其中,一些经验值还是值得记录下来的: 对于一个MySQL实例,CRUD上限经验值如下: Quer ...
 - pt-ioprofile分析查看mysql的真实IO情况
		
针对IO密集型应用做系统调优的时候,我们通常都需要知道系统cpu 内存 io 网络等系统性能 和 使用率,结合应用本身的访问量,以及 mysql的性能指标来综合分析.比如说:我们将系统压力情况分为 ...
 - 涂抹mysql笔记-管理mysql库和表
		
mysql的表对象是基于库维护的,也就是说它属于某个库,不管对象是由谁创建的,只要库在表就在.这根Oracle不同Oracle中的表对象是基于用户的.属于创建改对象的用户所有,用户在表就在.mysql ...
 - 二 mysql容量规划,性能测试
		
何为基线- 当前运行状态记录.快照- 用于和未来的状态进行对比- 未来时刻产生关键事件后的新状态,作为下一个基线基线数据收集,关注哪些要点- 系统负载- MySQL运行状态- 相应的业务指标1.系统& ...
 - mysql-5.7.xx在lcentos7下的安装以及mysql在windows以及linux上的性能差异
		
前言: 在centos上安装mysql,整整折腾了将近一天,因为是第一次安装,的确是踩了不少坑,这里详细记录下来,方便各位有同样需求的小伙伴参考. 该选择什么版本? mysql5.7有很多小版本,但是 ...
 - PERCONA-TOOLKIT : pt-ioprofile分析IO情况
		
针对IO密集型应用做系统调优的时候,我们通常都需要知道系统cpu 内存 io 网络等系统性能 和 使用率,结合应用本身的访问量,以及 mysql的性能指标来综合分析.比如说:我们将系统压力情况分为 ...
 
随机推荐
- 原生js实现继承
			
在多数语言中继承都很重要.JavaScript是一个基于原型的语言,这意味着对象可以直接从其他对象继承.以下列出几种常见的js继承方式. 原型链继承 function Father(){ this.s ...
 - WebLogic Developer版创建domain
			
1.直接在cmd命令窗口中运行%MW_HOME%目录下的configure.cmd文件,这个过程会解压一些jar文件,知道提示是否配置domain: 2.可以通过执行%MW_HOME%\oracle_ ...
 - C++ 驱动开发 error LNK2019
			
最近在写一个机器人的时候,发现驱动无法编译通过.本文告诉大家如何解决这个问题. 在 VisualStudio 2017 15.8 的版本提供新的功能C++ Just My Code Stepping ...
 - Linux 内核即插即用规范
			
一些新 ISA 设备板遵循特殊的设计规范并且需要一个特别的初始化顺序, 对增加接口板 的简单安装和配置的扩展. 这些板的设计规范称为即插即用, 由一个麻烦的规则集组成, 来建立和配置无跳线的 ISA ...
 - tensorflow学习笔记——ResNet
			
自2012年AlexNet提出以来,图像分类.目标检测等一系列领域都被卷积神经网络CNN统治着.接下来的时间里,人们不断设计新的深度学习网络模型来获得更好的训练效果.一般而言,许多网络结构的改进(例如 ...
 - Blazor 服务端组件 Render, RenderFragment ,RenderTreeBuilder, CascadingValue/CascadingParameter
			
一.组件 支撑Blazor的是微软的两大成熟技术,Razor模板和SignalR,两者的交汇点就是组件.通常,我们从ComponentBase派生的类型,或者创建的.razor 文件,就可以称作组件. ...
 - kafka性能测试代码
			
bin/kafka-producer-perf-test.sh --num-records 5000000 --record-size 5000 \ --topic kafkatopic2 \ --b ...
 - git push报错大文件,删除后重新commit依然报错
			
git push报错: github不能上传大文件,按道理删掉重新提交就行了 可是删掉后,git add -A,再git commit,再git push,依然报错 后来我想明白了 github上传时 ...
 - FreeNOS学习1——系统安装和使用
			
官网安装教程:http://www.freenos.org/doxygen/index.html 整体思路:在Ubuntu操作系统下,安装qemu虚拟机,然后用虚拟机运行FreeNOS的镜像.以下是详 ...
 - 第三阶段:3.Web端产品设计:4.产品设计-交互设计
			
交互设计主要做框架层以及结构层.包括交互关系,信息结构,界面布局,导航设计,信息内容. 导航关系非常重要. 这是框架层. 这是结构层. 要素就是信息内容.