MySql主要性能指标说明

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
监控 关系型数据库 MySQL
MySQL技能完整学习列表12、性能优化——1、性能指标和监控——2、优化查询和数据库结构——3、硬件和配置优化
MySQL技能完整学习列表12、性能优化——1、性能指标和监控——2、优化查询和数据库结构——3、硬件和配置优化
382 0
|
Prometheus 监控 Cloud Native
使用Prometheus监控MySQL性能指标
使用Prometheus监控MySQL性能指标
506 0
|
SQL Oracle 关系型数据库
MySQL的sql_mode模式说明及设置
MySQL的sql_mode合理设置 sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题. sql model 常用来解决下面几类问题   (1) 通过设置sql mode, 可以完成不同严格程度的数据校验,有效地保障数据准备性。
14420 0
|
关系型数据库 MySQL
MySql的详细安装说明
MySql的详细安装说明
MySql的详细安装说明
|
SQL 关系型数据库 MySQL
mysql binlog之一 binlog输出内容的说明
mysql binlog之一 binlog输出内容的说明
|
关系型数据库 MySQL
MySQL的IFNULL()、ISNULL()、NULLIF()函数用法说明
MySQL的IFNULL()、ISNULL()、NULLIF()函数用法说明
287 0
|
关系型数据库 MySQL
MySQL:关于RR模式下insert..select sending data状态说明
MySQL:关于RR模式下insert..select sending data状态说明
128 0
|
SQL 关系型数据库 MySQL
安装MySQL详细说明(以及各种报错问题的解决)
安装MySQL详细说明(以及各种报错问题的解决)
|
机器学习/深度学习 人工智能 数据建模
MySQL workbench数据建模的常用说明
MySQL workbench数据建模的常用说明
193 0
|
canal SQL 固态存储
MySql Binlog 说明 & Canal 集成MySql的更新异常说明 & MySql Binlog 常用命令汇总
MySql Binlog 说明 & Canal 集成MySql的更新异常说明 & MySql Binlog 常用命令汇总