一、为什么需要基准测试?
答:基准测试是针对系统设计的一种压力测试。可以观察系统在不同的压力下的行为,评估系统的容量,掌握哪些是重要的变化,或者观察系统如何处理不同的数据。
⚠️ 不能根据测试结果做简单的推断。例如:假设想知道使用新数据库服务后,系统能支撑多大的业务增长,这时候不能简单地通过测试结果支持的TPS(每秒事务数)是原系统推断说新系统一定可以支持40倍的业务增长,因为在业务增长的同时,系统的流量、用户、数据以及不同数据之间的交互都在增长,它们不可能都有40倍的支撑能力,尤其是相互之间的关系。
二、 基准测试的策略
- 针对整个系统的整体测试(集成式)2. 单独测试Mysql(单组件式)。
集成式测试的好处:
- 测试整个应用系统,包括Web服务器,应用代码,网络和数据库是非常有用的。因为用户关注的并不仅仅是MySQL本身的性能,而是整体应用的性能。
- Mysql并非总是应用的瓶颈
- 只有对应用整体测试,才能发现各部分之间的缓存带来的影响。
- 整体应用集成式更能揭示应用的真实表现
如果能在真实的数据集上执行重复的查询,那么针对Mysql的基准测试也是游泳的,但是数据本身和数据集的大小是真实的,可以采用生成环境的数据快照。
三、测试何种指标:
- 吞吐量 单位时间内的事务处理数
- 响应时间或者延迟 测试任务所需的整体时间
- 并发性 任意时间内有多少同时发生的并发请求
- 可扩展性 給系统增加一倍的资源,可以获得多少的吞吐量
四、基准测试方法
常见错误❌:
1. 使用真实数据的子集而不是全集。例如应用需要几百GB的数据,测试只有1GB数据
2. 使用错误的数据分布。例如使用均匀分布的数据测试,而系统的真是数据与很多热点区域。
3. 使用不真实的分布参数,例如假定所有用户的个人信息会被平均地读取。
4. 在多用户场景中,只做单用户的测试
5. 在单服务区上测试分布式应用。