一、是什么?
基准测试是针对系统设计的一种压力测试
目标是为了掌握系统的行为
二、为什么?
基准测试是唯一方便有效的、可以学习系统在给定的工作负载下会发生什么的方法。
基准测试中的压力不是来自真实,相对真实压力来说比较简单
基准测试通常要求尽可能快地完成,所以经常给系统造成过大压力
使用基准测试进行容量规划不能只根据测试结果做简单的推断,我们只能进行大概的测试,来确定系统大致的余量有多少。
三、基准测试的策略
基准测试有两种策略:
1、集成式基准测试,针对整个系统的整体测试,应用的场景:需要尽可能的体现应用的整体性能
2、单组件式基准测试,单独测试MySQL,应用的场景:在项目的初期
四、测试指标
1、吞吐量
单位时间内的事务处理数
这类基准测试主要针对在线事务处理(OLTP)的吞吐量,非常适用于多用户的交互式应用
测试单位是每秒事务数(TPS),有些也采用每分事务数(TPM)
2、响应时间或延迟
任务所需的整体时间
根据不同的时间单位可以计算出平均响应时间、最小响应时间、最大响应时间和所占百分比
最大响应时间通常意义不大,可以使用百分比响应时间来替代,比如95%的响应时间都是5毫秒,则表示任务在95%的时间段内都可以5毫秒完成
3、并发性
Web服务器的并发性的度量指标是在任意时间有多少同时发生的并发请求。
并发性基准测试需要关注的是正在工作中的并发操作,或者是同时工作中的线程数或者连接数。
并发性测试通常不是为了测试应用能达到的并发度,而是为了测试应用在不同并发下的性能(并发增加时,测量吞吐量是否下降,响应时间是否延长)
4、可扩展性
给系统增加一倍的工作,在理想情况下就能获得两倍的结果(即吞吐量增加一倍),或者说给系统一倍的资源(比如两倍的CPU数),就可以获得两倍的吞吐量
可扩展性指标对于容量规范非常有用,它可以提供其他测试无法提供的信息,发现应用的瓶颈。
根据指标去制定需求(比如什么样的响应时间可以接受、期待多少的并发性),然后基于这些需求来设计基准测试
五、基准测试方法
测试前先避免以下的常见问题:
1、使用真实数据的子集而不是全集
2、使用错误的数据分布
3、使用不真实的分布参数
4、在多用户场景中,只做单用户的测试
5、在单服务器上测试分布式应用
6、与真实用户行为不匹配
7、反复执行同一个查询
8、没有检查错误,基准测试完成后,一定要检查一下错误日志
9、忽略了系统预热的过程,需要了解系统重启后需要多长时间才能达到正常的性能容量
10、使用默认的服务器配置
11、测试时间太短
设计和规划基准测试