第二章 MySQL基准测试

2017-03-13  本文已影响0人  pantera19

基准测试是针对系统设计的一种压力测试。通常的目标是为了掌握系统的行为。重新某个系统状态,或者是做新硬件的可靠性测试。

2.1 为什么需要基准测试

基准测试是唯一方便有效的、可以学习系统在给定的工作负载下会发生什么的方法。可以观察系统在不同压力下的行为,评估系统的容量,掌握哪些是重要的变化,或者观察系统如何处理不同的数据。

1.验证基于系统的一些假设,确认这些假设是否符合实际情况。

2.重现系统中的某些异常行为,以解决这些异常。

3.测试系统当前的运行情况。如果不清楚系统当前的性能,就无法确认某些优化的效果如何。

4.模拟比当前系统更高的负载,以找出系统随着压力增加而可能遇到的拓展性平静下来。

5.规划未来的业务增长。基准测试可以评估在项目未来的负载下,需要什么样的硬件,多大容量的网络,以及其他相关资源。

6.测试应用适应可变环境的能力。也可测试系统对数据分布的处理能力。

7.测试不同的硬件、软件和操作系统配置。

8.证明新采购的设备是否配置正确。

基准测试的一个主要问题在于其不是真实压力的测试。基准测试的压力会受到比如数据量、数据和查询的分布等因素影响。但最重要的一点还是基准测试通常要求尽可能快的执行完毕,所以经常给系统造成过大的压力。

2.2 基准测试的策略

基准测试有两种主要的策略:一种是针对整个系统的整体测试,另外是单独测试MySQL。两种测试也被称为集成式以及单组件式集成测试。

针对整个系统做集成式测试,而不是单独测试MySQL的原因有以下几点:

• 测试整个应用系统,包括Web服务器、应用代码、网络和数据库是否非常有用的,因为用户关注的并不仅仅是MySQL本身的性能,而是应用整体的性能。

• MySQL并非总是应用的瓶颈,通过整体测试可以揭露这一点。

• 只有对应用做整体测试,才能发现各个部分之间的缓存带来的影响。

• 整体应用的集成式测试更能揭示应用的真实表现,而单独组建的测试很难做到这一点。

但是,应用的整体基准测试很难建立,而且很难正确设置。

不过,有时候不需要了解整个应用的情况,而只需要关注MySQL的性能。基于以下情况,可以只选择测试MySQL:

• 需要比较不同的schema或者查询性能。

• 针对应用中的某个问题的测试。

• 为了避免漫长的基准测试,可以通过一个短期的基准测试,做快速的“周期循环”,来检测出某些调整后的效果。

2.1.1 测试何种指标

在开始执行甚至在设计基准测试之前,需要先明确测试的目标。不同的方法测试不同的指标。

吞吐量

吞吐量指的是单位时间内的事务处理数。

响应时间或者延迟

指的是测试任务所需的整体时间。测试的时间单位可能是微妙、毫秒、秒或者分钟。根据不同的时间单位可以计算出响应时间、最小响应时间、最大响应时间和所占百分比。使用图表有助于理解测试结果。

并发性

并发行并非同时访问统一站点用户的数量,而关注的是工作中的并发操作,或者是同时工作中的线程数或者连接数。

可拓展性

简单的说,可拓展性指的是,给系统增加一倍多工作,在理想情况下就能获得两倍的结果。或者说给系统增加一倍的资源,就可以获得两倍的吞吐量。

2.3 基准测试方法

在基准测试之前,先来看一下如何避免一些常见的错误,这些错误可能会导致测试结果无用或者不准确:

• 使用真是数据的子集而不是全集。

• 使用错误的数据分布。

• 使用不真实的分布参数。

• 再多用户场景下,只做单用户的测试。

• 在单服务器上测试分布式应用。

• 与真实用户行为不匹配。

• 反复执行同一个查询。

• 没有检查错误。基准测试完成后,一定要检查一下错误日志,这应当是基本的要求。

• 忽略了系统预热的过程。

• 使用默认的服务器配置。

• 测试时间太短。

2.3.1 设计和规划基准测试

规划基准测试的第一步是提出问题并明确目标。然后决定采用标准的基准测试,还是选择专用的测试。

如果采用标准的基准测试,应该确定选择了合适的测试方案。

2.3.2 基准测试应该运行多久时间

基准测试应该运行足够长的时间,这一点很重要,如果需要测试系统在稳定状态时的性能,那么当然需要在稳定状态下的测试并观。大部分系统都会有一些应对突发情况的余量能够吸收性能尖峰,将一些工作延迟到高峰期之后执行。但当对机器加压足够长时间之后,这些余量会被耗尽,系统的短期尖峰也就无法维持原来的高性能。如果无法确认测试需要多长时间才足够,那就可以让测试一直执行。

2.3.3 获得系统性能和状态

上一篇下一篇

猜你喜欢

热点阅读