知识卡片
并发性该测的是同时处理中的请求数,而非"在线用户数"
内容
“并发性”是一个经常被想当然理解成”同时在线的用户数”或”同时打开 的会话数”的指标,但这个理解在做数据库基准测试时会带来严重的 误判。HTTP协议本身是无状态的,大多数所谓”在线用户”其实只是 浏览器上显示着一个页面、什么请求都没在发;Web服务器的并发性 本身也不等同于数据库的并发性——一个设计良好的应用可以同时 维持成百上千个数据库连接处于打开状态,但真正同一时刻在执行 查询的连接可能只有寥寥十几个。一个”同时有50000个用户”访问的 网站,落到MySQL数据库上,真实的并发压力可能只对应10到15个 并发请求——如果拿”50000用户同时在线”这个数字去设计数据库 基准测试的并发线程数,得到的测试结果和真实场景会有数量级的 偏差。真正该测量的”并发性”,指的是在任意给定时刻,系统里正在 被处理、还没处理完的操作数量(比如同时在运行的线程数或连接数), 而不是”打开了连接但什么都没做”的数量。这个区分之所以重要,是 因为并发性测试要回答的核心问题是”当同时工作的请求数增加时, 吞吐量会不会下降、响应时间会不会变长”——如果测试用的并发数 本身就搞错了统计口径,无论测出多漂亮的数字,都无法回答这个 真正该被回答的问题。
参考来源
- 位置:《高性能MySQL:第3版》第2章"MySQL基准测试"2.2.1节
"测试何种指标"(源文件:_epub-src/OEBPS/Text/part0009.xhtml)
- 结论依据:原文明确"HTTP协议是无状态的,大多数用户只是简单地
读取浏览器上显示的信息,这并不等同于Web服务器的并发性。而且,
Web服务器的并发性也不等同于数据库的并发性……一个设计良好的
应用,同时可以打开成百上千个MySQL数据库服务器连接,但可能
同时只有少数连接在执行查询。所以说,一个Web站点'同时有50000
个用户'访问,却可能只有10~15个并发请求到MySQL数据库",直接
说明"在线用户数"与"数据库真实并发请求数"之间的数量级落差。
- 原始内容:一个Web站点"同时有50000个用户"访问,却可能只有
10~15个并发请求到MySQL数据库。换句话说,并发性基准测试
需要关注的是正在工作中的并发操作,或者是同时工作中的线程数
或者连接数。