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

2.2 QPS

MySQL性能指标TPS+QPS+IOPS压测实例分析

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

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. mysqlslap3.1 压测

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

[root@jeames ~]# mysqlslap --help

3.2 案例mysqlslap -uroot -proot -h292.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是一款广泛应用于企业级软件开发的关系型数据库管理系统。对于一个MySQL数据库管理员而言,了解并掌握MySQL性能指标是至关重要的。其中最重要的三个性能指标分别是TPS、QPS和IOPS。本文将结合实例,详细介绍这三个性能指标的含义、压测方法以及优化手段。
TPS:事务处理能力
TPS(Transactions Per Second)指每秒钟所能处理的事务数。事务即数据库的基本操作单元,包括插入、更新、删除等。TPS除了可以衡量MySQL服务器的事务处理能力外,也可以衡量负载均衡器以及Web服务器的性能。如何进行TPS压测呢?有两种方法:一种是执行大量的插入、更新和删除操作;另一种是执行大量的查询操作。TPS压测需要使用测试工具,例如MySQL自带的benchmark工具。在优化TPS方面,可以通过增加服务器的内存和处理器核心数、优化SQL语句以及使用缓存等手段来提升TPS性能。
QPS:查询处理能力
QPS(Queries Per Second)指每秒钟所能处理的查询数。查询是MySQL最常见、最基本也是最消耗资源的操作,因此提升QPS意义重大。QPS实际上就是TPS中只包含了查询操作。如何进行QPS压测呢?需要使用测试工具,例如sysbench、Apache ab等。优化QPS需要注意的是,尽量减少查询结果集的大小、尽量减少重复查询、使用索引等。
IOPS:磁盘读写能力
IOPS(I/O Operations Per Second)指每秒钟所能处理的磁盘随机读写请求次数。IOPS是衡量MySQL读写性能的重要指标。在MySQL中,读取操作占据了大量的IOPS,因此提升IOPS就相当于提升MySQL磁盘读取能力。如何进行IOPS压测呢?需要使用测试工具,例如fio(Flexible I/O Tester)等。在优化IOPS方面,可以使用RAID、调整存储引擎参数、增加磁盘数量等手段来提升IOPS。
总结
本文详细介绍了MySQL的三个重要性能指标:TPS、QPS和IOPS,并结合实例分析了压测和优化手段。 MySQL的性能指标影响到整个系统的运行效率和稳定性,因此在平时的工作中需要重视并积极优化。尽管本文对MySQL的性能指标进行了较为详尽的介绍,但读者需要根据具体业务、系统情况以及测试工具的不同而进行适度的调整。希望本文对大家有所帮助。