基准测试是针对系统设计的一种压力测试

为什么需要基准测试?

基准测试可以完成以下工作:

  • 验证基于系统的假设
  • 重现系统中的异常行为
  • 测试当前系统的运行情况
  • 模拟比当前系统更高的负载,以找出系统随着压力增加而可能遇到的拓展性瓶颈
  • 规划未来的业务增长
  • 测试应用适应可变环境的能力
  • 测试不同的硬件,软件和操作系统配置
  • 证明新采购的设备是否配置正确

基准测试的策略

  • 集成式基准测试,针对整个系统的整体测试
  • 单组件式基准测试,单独测试mysql

测试何种指标

测试之前,需明确测试目标,测试目标明确了需要选择怎样的测试工具和技术,以获得精确而有意义的结果

  • 吞吐量

吞吐量指单位时间内的事务处理数,这类基准测试主要针对在线事务处理(OLTP)的吞吐量,非常适合多用户的交互式应用,常用的单位是每秒事务数(TPS),有时候也采用每分钟事务数(TPM).

  • 响应时间或延迟

用于测试任务所需的整体时间。单位可能是微秒,毫秒,秒或分钟,可以计算出平均响应时间,最大(小)响应时间和所占百分比,通常可以使用百分比响应时间来替代最大响应时间,例如95%的响应时间都是5毫秒,此外可以将测试结果绘制成折线图或者散点图,直观的表示数据结果集的分布情况。

  • 并发性

web服务器的并发性更准确的度量指标,应该是任意时间有多少同时发生的并发请求。需要关注的是正在工作中的并发操作。比如5000个用户在访问web网页,但由于HTTP协议是无状态的,大多数用户只是简单的读取浏览器上显示的信息,并不代表有5000的并发。
web服务的并发性不等同于数据库的并发性,而仅仅表示会话存储机制可以处理多少数据的能力。比如一个web应用有5000个用户访问,但可能只有10-15个并发请求到mysql数据库。

并发性测试通常不是测试应用能达到的并发度,而是为了测试应用在不同并发下的性能,当并发性增加时,需要测试吞吐量是否下降,响应时间是否变长,如果是这样, 应用就可能无法处理峰值压力。**

数据库的并发性可以通过sysbench指定32或64或128个线程的测试,然后在测试期间记录mysql的thread_running的
状态值
**

  • 可拓展性

可拓展性,指的是给系统增加一倍的工作,在理想情况下就能获得两倍的效果,即吞吐量增加一倍,或者说,给系统增加一倍的资源,比如增加一倍的CPU,就可以获得两倍的吞吐量,同时性能(响应时间)必须在可接受的范围内。大多数系统无法做到如此理想的线性拓展,随着压力的变化,吞吐量和性能都可能越来越差。

基准测试方法

避免常见的错误:

  • 使用真实数据的子集而不是全集
  • 使用错误的数据分布
  • 使用不真实的分布参数
  • 在多用户场景中,只做单用户测试
  • 在单服务器上测试分布式应用
  • 与真实用户行为不匹配
  • 反复执行同一个查询
  • 没有检查错误
  • 忽略了系统预热的过程
  • 使用默认的服务器配置
  • 测试时间太短

基准测试工具

  • 集成式测试工具
    • ab
    • http_load
    • JMeter
  • 单组件式测试工具
    • mysqlslap
    • mysql benchmark suite
    • super smack
    • database test suite
    • percona’s TPCC-MYSQL tool
    • sysbench