基准测试是什么?
基准测试主要是一种压力测试,通常是为了展示系统的性能,或者是为了测新硬件的可靠性。
注:
基准测试的主要压力并非是真正的压力测试,基准测试主要施加给系统的是一种简单的压力,而并非真实的压力一样。因真实的压力是可变不可预测的。很难用结果来说明。
比如: 如果需要通过基准测试来测试新的数据库服务器能够支撑多大的业务增长。 那么首先需要对新数据库进行基准测试,发现如果超过原系统的10倍。这时候就不能简单说是超出原系统的10倍。这是因为系统的流量,数据的交互都会增长。而这些改变也会使对应设计改变。包括新特性上线,某种特性可能对数据库的造成的压力远超原系统,而这些新增的特性,数据的交互方式,新特性和新数据交互造成的压力是无法模拟的。而如果进行真正的压力测试,这就不是基准测试了。 基准测试只是尽量简单直接,容易交互,成本低便于执行的方式。同时,如果模拟新系统的代价是高昂的,因为新开发的应用没有过往数据的支持,能只生成新的数据,而测试总需要伴随大量的数据来观察压力对系统性能的变化。
————————————————————————————————————————————
为什么要使用基准测试?
基准测试是唯一方便有效的,可以在给定的任务负载下会发生什么。可以观察不同压力下的性能。
使用场景:
- 验证基于系统的假设,查看是否符合实际情况。
- 重现系统异常,用于解决异常。
- 测试系统当前的运行情况,不清楚当前系统的性能和弊端就无法进行优化。
- 模拟比当前系统更高的负载,找出压力存在的瓶颈。
- 模拟未来业务的增长可能使用的硬件问题
- 测试适用环境的可变性。
- 测试新购设置问题
- 测试不同硬件,软件,系统配置。
—————————————————————————————————————————————
基准测试策略
主要策略有两种: 一种是整体测试(也叫集成测试), 一种是单侧Mysq(单组件式).
大多数情况下会去选择整体测试,主要原因是:
- 测试整个系统服务器,代码,网络和数据库。因为用户关注的并非只有一个点的性能,而是整体的性能。
- Mysql 并非是整个应用的瓶颈。
- 对整体进行测试后,会发现各缓存的影响。
- 整体测试最能直接看出应用的真实情况。
基准测试的工具
ab :一个apache HTTP 服务器的基准测试工具。可以测试每秒HTTP 服务器处理了多少请求。
http_load: 针对于WEB 服务器进行测试的。每秒可以测试WEB 服务器的请求。
JMeter : 一个java 应用程序,加载其他应用并测试性能。单它比ab 和 http_load 都复杂,可以通过预热来模拟真实的用户访问。
Mysql 中的 BENCHMARK 函数
BENCHMARK 函数是mysql 内置的函数,可以测试某些特定的执行速度。参数可以是需要执行的次数和表达式。表达式可以是任何标量的表达式,比如返回值是标量的子查询或函数。该函数可以测试某些特定的操作性能。
这个函数只是简单的返回服务器执行表达式的时间,不会涉及分析和优化的开销。表达式必须是一个用户定义的变量。
如: set @a := ‘text’
单组件测试工具
mysqlslap: 模拟服务器的负载,并输出计时信息。、
sql-bench:mysql 自己的基准测试套件, 可以用在不同服务器上进行测试。
super Smach : 提供压力测试和负载生成。