2.基准测试
~~~~ 基准测试是针对系统设计的一种压力测试,通常的目标是为了掌握系统的行为以及重现系统的某个状态,或者是做新硬件的可靠性测试。常用工具sysbench。
2.1基准测试的目的
基准测试的主要用途:
- 验证一些基于系统的假设是否符合实际情况
- 重现系统中的某些异常行为
- 测试系统当前的运行情况
- 模拟更高的系统负载
- 评估项目需要的硬件和网络等资源需求
- 测试应用适应可变环境的能力
- 测试不同的硬件、软件和西哦他嗯的配置
- 验证当前设备是否配置成功
- 创建单元测试套件
2.2策略
~~~~ 基准测试有两种策略:
- 针对整个系统的整体测试(集成式、全栈式)
- 单独测试(单组件式)
选择整个系统测试:
- 测试整体性能,不需要单独考虑mysql的性能,关心的是整个应用。
- mysql并不总是瓶颈
- 只有整体测试,才能看出没部分的缓存行为
- 整体测试能直观的看出整体的性能,这是单独测试无法做到的
但是在最初阶段,我们并不可能,也不需要整体测试,只需要单独测试mysql,比如以下情况:
- 比较不同的schenma或查询的性能
- 针对应用中某个具体问题的测试
- 为了避免长期的基准测试,用一个短期的基准测试,来检测出某些调整后的效果
测试的指标
吞吐量
响应时间或者延时
并发量
可扩展性
2.3测试的方法
我们实现的基准测试最好包括一下特质:
可重复性:可以重复执行的测试
可观测性:通过全方面的监控,及时了解和分析测试过程发生了什么
可展示性:相关人员可以直观明了的了解测试结果
真实性:测试结构反映了真实情况
可执行性:可以快速验证和分析问题
我们在实际过程中应该注意避免的错误:
- 使用真实数据的子集而不是全集
- 使用错误的数据分布(随机数据通常无法模拟真实数据分布)
- 使用不真实的数据分布
- 在多用户场景中只做单用户测试
- 在单服务器上测试分布式
- 与真实用户行为不匹配
- 反复执行同一个查询
- 没有错误检测
- 忽略系统预热的过程(系统启动后,马上开始测试)
- 使用默认的服务器配置
- 测试时间过短
测试时长的选择:基准测试需要运行足够长的时间,这一点很重要,如果无法确定时间,尽量运行到系统稳定,同时注意系统嗯预热,一般IO读写在一段(比如三到四个小时,这个和硬件和网络资源有关)趋于稳定,但是写IO更长的时间内变化很大。一个简单的测试规划,就是等系统看起来至少稳定的时间等于系统预热的时间。