3. 吞吐测试核心指标

做吞吐测试,你得先搞清楚一件事。

你测的到底是什么?

很多人一上来就找工具,装环境,压了一堆数据,结果一问——他连TPS和QPS的区别都说不清。这其实挺常见的。我刚带团队那会儿,有个组员拿着报告跟我说:“系统吞吐量5000”,我一看,他拿QPS当TPS报了,两个差了十倍。

嗯,所以咱们先把这四个核心指标掰扯清楚。

3.1 TPS 与 QPS:一对“双胞胎”

TPS:Transactions Per Second,每秒事务数。

QPS:Queries Per Second,每秒查询数。

这两兄弟最容易搞混。我个人的理解很简单:TPS 侧重“有没有改数据”,QPS 侧重“有没有查数据”。

举个例子。你登录淘宝,输入密码,点“登录”。

  • 这个动作涉及用户校验、生成、写日志——这是一个事务。系统TPS +1。
  • 如果登录后什么都没干,后台没有新的查询请求,那QPS不会动。

但你打开商品详情页,浏览一遍——这个行为不写数据,只是读。QPS +1,但TPS不增加。

实战判断法:

我习惯用一个简单方法判断:如果请求会修改数据库,就算TPS;如果只是读,就算QPS。

当然,有些场景下两者会重合,比如一个写事务也包含多次查询。这时我更关注TPS,因为它是业务的关键路径。

具体到测试,如果系统是纯查询模块(比如搜索引擎),你盯着QPS就够了。如果是混合型系统,比如电商下单、支付流水,那核心指标一定是TPS。

我踩过一个坑。有个支付系统,我压测时只看QPS,飙到2万多,满意得不行。结果一上线,数据对不上。后来排查发现,QPS高是因为缓存层扛住了读请求,但写数据库的事务积压了,真实TPS不到2000。从那以后,我再也不敢只看单一指标了。

3.2 TPS与QPS的关系公式

你可以记一个简单公式:

TPS  ≈  QPS  ×  写操作占比
QPS  =  读操作 + 写操作(单次请求拆分)

举个例子。如果一个系统80%是读,20%是写。

  • QPS压到5000。
  • 写请求占比20%,也就是1000个写请求/秒。
  • 但如果一个写请求要完成三个数据库写操作,那么实际的TPS可能是1000,而不是3000。

为什么?因为TPS计算的是“业务事务”的粒度,不是数据库操作的粒度。

指标 定义 典型场景 我用的判断标准
TPS 每秒完成的事务数 下单、支付、转账 写操作或混合操作
QPS 每秒完成的查询数 商品搜索、内容浏览 纯读或单次请求

3.3 带宽:最容易忽略的瓶颈

带宽往往是被忽略的那个。

为什么?因为大部分人压测都在本地或内网,带宽根本不是问题。但到了生产环境,尤其公网场景,带宽就是第一道坎。

我遇到过一件事。有次给一家客户做压测,服务器端CPU和内存都只有30%,TPS死活上不去。我盯着网络监控看,发现网卡流量到了1Gbps,已经逼近上限了。后来一问,客户用的共享带宽,1Gbps就是极限。我改用压缩传输,TPS直接翻倍。

带宽的计算公式很简单:

吞吐量(bps) = 平均包大小(bit) × 每秒包数量

或者更直观一点:

假设单次请求+响应是2KB,带宽是100Mbps(约12.5MB/s)。
理论最大 QPS = 12.5MB/s ÷ 2KB = 约6400。

实战建议:测试前,先算一下你的带宽上限。如果你的响应包很大(比如图片、视频),带宽会先成为瓶颈。

3.4 并发数:压测的“油门”

并发数就是你一次性发起多少个连接。它不是吞吐量本身,而是影响吞吐量的关键因素。

我记得有一次压测一个API,并发从100加到500,TPS涨得很快。但到了800并发,TPS不涨反跌。这叫“拐点”——系统已经过载了。

并发数与吞吐量的关系:

  • 线性增长区:并发增加,吞吐同步增加。
  • 平稳区:并发增加,吞吐不再涨,说明资源饱和。
  • 下降区:并发继续增加,吞吐下降,系统开始排队、超时。

你想想看,一旦进入下降区,就是典型的“用户增多但体验变差”。

避坑指南:我曾经犯过一个经典错误——用并发数当吞吐量去汇报。老板问:“系统能支持多少并发?”我说2000。后来才发现,2000并发时TPS只有500。并发数和吞吐量不是一回事。

3.5 四者关系:一张图看懂

为了方便理解,我画了一张关系图。你看完应该就能把四个指标串起来了。

吞吐测试核心指标关系图 系统吞吐能力 TPS(事务/秒) QPS(查询/秒) 带宽(bps) 并发数 核心逻辑 • 并发数是油门,TPS/QPS是速度,带宽是道路宽度 • 四者并非独立:带宽受限 → 并发数增加无效 → TPS/QPS无法提升 • 真实场景需同时监控,缺一不可

3.6 实战:怎么用这些指标?

知道了定义没用,关键是怎么用。

我个人的测试流程是:

  1. 先估算业务模型:单次请求平均包多大?写操作占比多少?
  2. 再算带宽上限:如果包太大,先优化传输,再压测。
  3. 然后设定并发目标:比如从100并发开始,每次加50,直到找到拐点。
  4. 最后看TPS和QPS曲线:找到稳定区,看是否满足业务目标。

一个小技巧:压测时,最好把四者显示在同一个仪表盘上。当并发增加但TPS不涨时,立刻看带宽——如果带宽已经打满,说明要加网卡或压缩数据了。

3.7 常见误解:我见过最多的三种

在这个领域待久了,我见过太多人犯同样的错。列出来,你避一下:

  • 误解一:TPS高就是系统好。 不对。如果TPS高但错误率也高,或者响应时间巨长,那就是牺牲质量换数量。
  • 误解二:QPS和TPS可以互相换算。 不能。它们关注不同的维度,除非你的系统全是纯查询或全是纯写入。
  • 误解三:并发数越高越好。 错。超过拐点后,并发数越高,系统越烂。

我记得有次一个同事信誓旦旦地说:“我压到3000并发,TPS有8000,系统很牛。”我说:“3000并发,TPS才8000?平均一个并发只有2.67笔/秒,这叫低效,不叫牛。”

所以啊,一定要把这些指标结合起来看。

3.8 总结:一张表格帮你记忆

指标 关注什么 我常用的测试值 踩坑提醒
TPS 业务事务处理能力 2000~10000 取决于系统 别把数据库操作当TPS
QPS 查询请求处理能力 3000~50000 常见 与TPS混用容易错
带宽 数据通道容量 1Gbps~10Gbps 内网测试容易忽略
并发数 同时在线连接数 500~5000 不是越多越好

这四个指标,说白了就是你的系统的“体检项目”。你不能只看一项,也不能完全不看。下一轮压测前,先问问自己:这四个指标,你都盯住了吗?