MySQL性能指标TPS+QPS+IOPS压测


Posted in MySQL onAugust 05, 2022

前言

今天主要介绍MySQL数据库,或者说所有数据库的三个关键性能指标TPS\QPS\IOPS

1. 性能指标概览

QPS(Queries Per Second)就是每秒的查询数,对数据库而言就是数据库每秒执行的 SQL 数(含 insert、select、update、delete 等)。
TPS(Transactions Per Second)就是每秒的事务数。TPS 对于数据库而言就是数据库每秒执行的事务数,以 commit 成功次数为准。
IOPS 每秒磁盘进行的I/O操作次数

2. 指标计算方式

2.1 TPS

适用innodb Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数
一般的,评价系统性能均以每秒钟完成的技术交易的数量来衡量。系统整体处理能力取决于处理能力最低模块的TPS值

mysql> SHOW GLOBAL STATUS LIKE 'Com_commit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_commit    | 22402 |
+---------------+-------+
1 row in set (0.00 sec)

mysql> SHOW GLOBAL STATUS LIKE 'Com_rollback';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_rollback  | 0     |
+---------------+-------+
1 row in set (0.00 sec)
mysql> SHOW GLOBAL STATUS LIKE 'Uptime'
    -> ;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime        | 3319  |
+---------------+-------+
1 row in set (0.01 sec)
TPS=(Com_commit + Com_rollback)/Uptime

MySQL性能指标TPS+QPS+IOPS压测

2.2 QPS

同时适用与InnoDB和MyISAM 引擎 每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准 对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力

MySQL性能指标TPS+QPS+IOPS压测

2.3 IOPS

IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。随机读写频繁的应用,如OLTP(Online Transaction Processing),IOPS是关键衡量指标。另一个重要指标是数据吞吐量(Throughput),指单位时间内可以成功传输的数据数量。对于大量顺序读写的应用,如VOD(Video On Demand),则更关注吞吐量指标。 IOPS可细分为如下几个指标: Toatal IOPS,混合读写和顺序随机I/O负载情况下的磁盘IOPS,
这个与实际I/O情况最为相符,大多数应用关注此指标。
Random Read IOPS,100%随机读负载情况下的IOPS。
Random Write IOPS,100%随机写负载情况下的IOPS。
Sequential Read IOPS,100%顺序负载读情况下的IOPS。
Sequential Write IOPS,100%顺序写负载情况下的IOPS。
IOPS的测试benchmark工具主要有Iometer, IoZone, FIO等,可以综合用于测试磁盘在不同情形下的IOPS。对于应用系统,需要首先确定数据的负载特征,然后选择合理的IOPS指标进行测量和对比分析,据此选择合适的存储介质和软件系统。

理论上可以计算出磁盘的最大IOPS,即IOPS = 1000 ms/ (Tseek + Troatation),忽略数据传输时间。假设磁盘平均物理寻道时间为3ms, 磁盘转速为7200,10K,15K rpm,则磁盘IOPS理论最大值分别为,
IOPS = 1000 / (3 + 60000/7200/2) = 140
IOPS = 1000 / (3 + 60000/10000/2) = 167
IOPS = 1000 / (3 + 60000/15000/2) = 200

3. mysqlslap

3.1 压测

mysqlslap 是 MySQL 自带的一个用于实现负载性能测试和压力测试的工具。它可以模拟多个客户端对数据库进行施压,并生成报告来了解数据库的性能状况。
mysqlslap 的运行过程主要分三步:
① 创建库、表,导入数据用于测试。此过程由单线程完成。
② 开始进行压力测试。该步骤可以使用多线程完成。
③ 清理测试数据。此过程由单线程完成。

[root@jeames ~]# mysqlslap --help 

MySQL性能指标TPS+QPS+IOPS压测

3.2 案例

mysqlslap -uroot -proot -h192.168.1.54 -P3306 \
--create-schema=mysqlslap --auto-generate-sql \
--auto-generate-sql-load-type=mixed \
--concurrency=100,200 --number-of-queries=1000 \
--iterations=10 --number-int-cols=7 \
--number-char-cols=13 --auto-generate-sql-add-autoincrement

Benchmark
#运行所有语句的平均时间,单位秒
Average number of seconds to run all queries: 0.018 seconds
#运行所有语句的最小秒数
Minimum number of seconds to run all queries: 0.018 seconds
#运行所有语句的最大秒数
Maximum number of seconds to run all queries: 0.018 seconds
#客户端数量
Number of clients running queries: 1
#每个客户端运行查询的平均数
Average number of queries per client: 0

该语句表示测试并发为 100 和 200 的情况,进行 1000 次访问(该值一般这样预估出来:并发客户数×每客户查询次数)。这样的测试方法迭代 10 次,最终显示最大、
最小、平均值
其中:--debug-info,代表要额外输出 CPU 以及内存的相关信息。如果报错 Option 'debug-info' used, but is disabled 请取消 debug-info 参数
-number-int-cols=7 表示生成的表中必须有 7 个 int 类型的列
-number-char-cols=13 表示生成的表中必须有 13 个 char 类型的列
-concurrency 代表并发数量,多个可以用逗号隔开,concurrency=10,50,100, 并发连接线程数分别是 10、50、100 个并发。
--engines 代表要测试的引擎,可以有多个,用分隔符隔开。
--iterations 代表要运行这些测试多少次。
--auto-generate-sql 代表用系统自己生成的 SQL 脚本来测试。
--auto-generate-sql-load-type 代表要测试的是读还是写还是两者混合的(read,write,update,mixed)
--number-of-queries 代表总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算。
--debug-info 代表要额外输出 CPU 以及内存的相关信息。
--number-int-cols :创建测试表的 int 型字段数量
--auto-generate-sql-add-autoincrement : 代表对生成的表自动添加 auto_increment 列,从 5.1.18 版本开始
--number-char-cols 创建测试表的 char 型字段数量。
--create-schema 测试的 schema,MySQL 中 schema 也就是 database。
--query 使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者 sql 语句来执行测试。
--only-print 查看语句做了什么。

MySQL性能指标TPS+QPS+IOPS压测

到此这篇关于MySQL性能指标TPS+QPS+IOPS压测的文章就介绍到这了,更多相关MySQL性能指标压测内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL 慢查询日志深入理解
Apr 22 MySQL
MySQL COUNT函数的使用与优化
May 10 MySQL
52条SQL语句教你性能优化
May 25 MySQL
Navicat连接MySQL错误描述分析
Jun 02 MySQL
SQL实现LeetCode(196.删除重复邮箱)
Aug 07 MySQL
SQL实现LeetCode(197.上升温度)
Aug 07 MySQL
详细聊聊MySQL中慢SQL优化的方向
Aug 30 MySQL
MySQL数据库索引的最左匹配原则
Nov 20 MySQL
分享mysql的current_timestamp小坑及解决
Nov 27 MySQL
关于mysql中时间日期类型和字符串类型的选择
Nov 27 MySQL
MySQL事务操作的四大特性以及并发事务问题
Apr 12 MySQL
MySQL深分页问题解决思路
Dec 24 MySQL
Mysql中mvcc各场景理解应用
Aug 05 #MySQL
数据设计之权限的实现
一文解答什么是MySQL的回表
Aug 05 #MySQL
MySQL一劳永逸永久支持输入中文的方法实例
Aug 05 #MySQL
SQLServer常见数学函数梳理总结
Aug 05 #MySQL
MySQL生成千万测试数据以及遇到的问题
Aug 05 #MySQL
面试官问我Mysql的存储引擎了解多少
You might like
杏林同学录(七)
2006/10/09 PHP
php中error与exception的区别及应用
2014/07/28 PHP
php延迟静态绑定实例分析
2015/02/08 PHP
再谈Yii Framework框架中的事件event原理与应用
2020/04/07 PHP
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
在Javascript中 声明时用"var"与不用"var"的区别
2013/04/15 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
JavaScript中的pow()方法使用详解
2015/06/15 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
表格展示利器 Bootstrap Table实例代码
2017/09/06 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
Mysql数据库反向生成Django里面的models指令方式
2020/05/18 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
校领导推荐信
2013/11/01 职场文书
千元咖啡店的创业计划书范文
2013/12/29 职场文书
销售助理岗位职责
2014/02/21 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
银行授权委托书格式
2014/10/10 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android