写点什么

MySQL 性能指标 TPS\QPS\IOPS 如何压测?

  • 2023-02-28
    湖南
  • 本文字数:2496 字

    阅读完需:约 8 分钟

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

同时适用与 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) = 140IOPS = 1000 / (3 + 60000/10000/2) = 167IOPS = 1000 / (3 + 60000/15000/2) = 200
复制代码

3. mysqlslap

3.1 压测

mysqlslap 是 MySQL 自带的一个用于实现负载性能测试和压力测试的工具。它可以模拟多个客户端对数据库进行施压,并生成报告来了解数据库的性能状况。


mysqlslap 的运行过程主要分三步:

  1. 创建库、表,导入数据用于测试。此过程由单线程完成。

  2. 开始进行压力测试。该步骤可以使用多线程完成。

  3. 清理测试数据。此过程由单线程完成。


[root@jeames ~]# mysqlslap --help

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 查看语句做了什么。
复制代码



作者:IT 邦德

链接:https://juejin.cn/post/7127791857475518494

来源:稀土掘金

用户头像

还未添加个人签名 2021-07-28 加入

公众号:该用户快成仙了

评论

发布
暂无评论
MySQL性能指标TPS\QPS\IOPS如何压测?_Java_做梦都在改BUG_InfoQ写作社区