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 Router的安装部署
Apr 24 MySQL
MySQL 数据丢失排查案例
May 08 MySQL
MySQL大小写敏感的注意事项
May 24 MySQL
MYSQL数据库使用UTF-8中文编码乱码的解决办法
May 26 MySQL
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
Jun 26 MySQL
ORM模型框架操作mysql数据库的方法
Jul 25 MySQL
MySQL 用 limit 为什么会影响性能
Sep 15 MySQL
Mysql中一千万条数据怎么快速查询
Dec 06 MySQL
Mysql使用全文索引(FullText index)的实例代码
Apr 03 MySQL
MySQL去除密码登录告警的方法
Apr 20 MySQL
优化Mysql查询的示例
Apr 26 MySQL
MySQL中dd::columns表结构转table过程及应用详解
Sep 23 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
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
2013/06/01 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
给文字加上着重号的JS代码
2013/11/12 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
2019/04/18 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
Python实现的金山快盘的签到程序
2013/01/17 Python
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
Python批量转换文件编码格式
2015/05/17 Python
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
python判断变量是否为列表的方法
2020/09/17 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
2020/10/19 Python
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
文秘专业大学生求职信
2013/11/10 职场文书
迎元旦广播稿
2014/02/22 职场文书
招商引资工作汇报
2014/10/28 职场文书
单位委托函范文
2015/01/29 职场文书
村官2015年度工作总结
2015/10/14 职场文书
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers