在性能测试中,Percentile(百分位数)是一个常见且很重要的术语。从开始分析性能测试报告的第一天起,我们就有听过90th Percentile。那么,这个 90th Percentile到底是啥呢?
什么是90th Percentile?
百分位数是将给定的 样本组 分成 100 个大小相等的区间,这使得我们可以根据百分比分析数据。
这里通过一个简单的例子来解释百分位的用法:如果90%的响应时间值都低于某个HTTP 请求的响应时间,则将该时间称为 90th Percentile 响应时间。
在下图中,90% 的请求在 3秒或更短的时间内得到处理:
在性能测试方面,首先将特定事务或请求的响应时间按升序排序,然后忽略样本数中具有高值的 10%。剩余值中的最高数字将是90th Percentile。在公司常用的性能测试工具中,最后生成的报告里都会生成90th Percentile:
90th Percentile有啥优点?
网络上有个词经常被大家提起, 那就是“被平均”。例如:某地平均工资为8k,若仔细观察数据可发现,大约十分之九的人薪资只有5k,而另外十分之一的人薪资高达35k,通过计算平均值确实为8k。估计没人喜欢这样“被平均”吧😅。同样,应用程序性能也会被平均值所误导。
在某产品的性能测试中,其平均响应时间是达标的
通过细究其平均响应时间曲线,发现随着时间的增加,响应时间也在不断增大,最终超过设定的性能指标。但最后结果却是通过的,这就说明后半部分响应时间“被平均”了。
90th Percentile这个数值则可以有效的规避这个现象,该测试中90th Percentile为3.127秒,很明显是高于其性能指标3秒的。
如果响应时间的第 50个百分位(中位数)为 3 秒,则意味着 50% 的事务要么与 3 秒一样快,要么快于 3 秒。如果同一事务的第 90 个百分位为 3 秒,则意味着 90% 的速度一样快或更快,只有 10% 的速度较慢。在这种情况下,平均值一定低于 3 秒或介于两者之间。
其次,有时平均响应时间看起来非常长,而单个数据集看起来很正常。但由于可能是网络波动,导致响应时间出现几个偶发性的峰值,从而影响平均响应时间数值,并最终影响测试结果。在这种情况下,90th Percentile(或其他百分位值)也可以从结果中消除异常尖峰数据。
正如下图所示,平均响应时间明显受到异常数据的影响,而90th Percentile的结果与其稳定运行时的响应时间相差无几。
综上,90th Percentile可以帮助我们更好地了解应用的真实性能,因为它显示了实际响应时间曲线的一部分,而不是采用统计学上的方法进行计算。如果90th Percentile都能满足性能指标,表明90%的用户可以做到符合性能目标的体验,这样面对客户问及系统性能时,是不是更加有信心了呢😏
附:后经抓取慢sql,发现第一个场景在新增完数据后有更新操作。由于新增导致查库的基础数据量不断增加,在无索引的情况下,对全表进行查询,便导致该场景的响应时间一直递增。
使用explain查看慢sql执行计划,发现其并无索引,执行的是全表查询
增加索引后,响应时间大幅降低,曲线回归正常。
版权归原作者 臭虾烂鱼 所有, 如有侵权,请联系我们删除。