基准测试(benchmark)是我们需要掌握的一项基本技能。简单的说,基准测试是针对系统设计的一种压力测试。通常的目标是为了掌握系统的行为。
基准测试是唯一方便有效的、 可以学习系统在给定的工作负载下会发生什么的方法。基准测试可以观察系统在不同压力下的行为,评估系统的容量,掌握哪些是重要的变化,或者观察系统如何处理不同的数据。基准测试可以完成以下工作:
• 重现系统中的某些异常行为,以解决这些异常。
• 测试系统当前的运行情况。 如果不清楚系统当前的性能,就无怯确认某些优化的效果如何。 也可以利用历史的基准测试结果来分析诊断一些无陆预测的问题。
• 模拟比当前系统更高的负载,以找出系统随着压力增加而可能遇到的扩展性瓶颈。
• 规划未来的业务增长。 基准测试可以评估在项目未来的负载下,需要什么样的硬件,需要多大容量的网络,以及其他相关资源。 这有助于降低系统升级和重大变更的风险。
• 测试应用适应可变环境的能力。 例如,通过基准测试,可以发现系统在随机的井发峰值下的性能表现,或者是不同配置的服务器之间的性能表现。 基准测试也可以测试系统对不同数据分布的处理能力。
基准测试有两种主要的策略:一是针对整个系统的整体测试,另外是单独测试MySQL。这两种策略也被称为集成式(full-stack)以及单组件式(single-component)基准测试。针对整个系统做集成式测试,而不是单独测试MySQL的原因主要有以下几点:
① 测试整个应用系统,包括Web服务器、应用代码、网络和数据库是非常有用的,因为用户关注的并不仅仅是MySQL本身的性能,而是应用整体的性能。
② MySQL并非总是应用的瓶颈,通过整体的测试可以揭示这一点。
③ 只有对应用做整体测试,才能发现各部分之间的缓存带来的影响。
④ 整体应用的集成式测试更能揭示应用的真实表现,而单独组件的测试很难做到这一点。
在开始执行甚至是在设计基准测试之前,需要先明确测试的目标。测试目标决定了选择什么样的测试工具和技术,以获得精确而有意义的测试结果。
吞吐量
吞吐量指的是单位时间内的事务处理数。这一直是经典的数据库应用测试指标。这类基准测试主要针对在钱事务处理(OLTP)的吞吐量,非常适用于多用户的交互式应用。常用的测试单位是每秒事务数(TPS),有些也采用每分钟事务数(TPM)。
响应时间或者延迟
这个指标用于测试任务所需的整体时间。根据具体的应用,测试的时间单位可能是微秒、毫秒、秒或者分钟。根据不同的时间单位可以计算出平均响应时间、最小晌应时间、最大响应时间和所占百分比。最大响应时间通常意义不大,因为测试时间越长,最大晌应时间也可能越大。而且其结果通常不可重复,每次测试都可能得到不同的最大响应时间。因此,通常可以使用百分比响应时间来替代最大晌应时间。例如,如果95%的响应时间都是5毫秒,则表示任务在95%的时间段内都可以在5毫秒之内完成。
并发性
井发性是一个非常重要又经常被误解和误用的指标。例如,它经常被表示成多少用户在同一时间浏览一个Web站点,经常使用的指标是有多少个会话。然而,HTTP协议是无状态的,大多数用户只是简单地读取浏览器上显示的信息,这并不等同于 Web服务器的并发性。而且,Web服务器的并发性也不等同于数据库的并发性,而仅仅只表示会话存储机制可以处理多少数据的能力。Web服务器的并发性更准确的度量指标,应该是在任意时间有多少同时发生的并发请求。
可扩展性
在系统的业务压力可能发生变化的情况下,测试可扩展性就非常必要了。单地说,可扩展性指的是,给系统增加一倍的工作,在理想情况下就能获得两倍的结果(即吞吐量增加一倍)。或者说,给系统增加一倍的资源(比如两倍的 CPU 数),就可以获得两倍的吞吐量。当然,同时性能(响应时间)也必须在可以接受的范围内。
集成式测试, 通常是获得整个应用概况的最佳手段。已有的集成式测试工具如下所示。
ab
ab是一个Apache HTTP 服务器基准测试工具。 它可以测试 HTTP 服务器每秒最多可以处理多少请求。 如果测试的是Web应用服务,这个结果可以转换成整个应用每秒可以满足多少请求。这是个非常简单的工具,用途也有限,只能针对单个URL 进行尽可能快的压力测试。
http_load
这个工具概念上和 ab类似,也被设计为对Web服务器进行测试,但比ab要更加灵活。可以通过一个输入文件提供多个URL, http _load 在这些URL中随机选择进行测试。
JMeter
JMeter是一个 Java应用程序,可以加载其他应用井测试其性能。它虽然是设计用来 测试Web应用的, 但 也可以用于测试其他诸如FTP服务器,或者通过JDBC进行数据库查询测试。
mysqlslap
mysqlslap 可以模拟服务器的负载,并输出计时信息。它包含在MySQL5.1的发行包中,应该在MySQL 4.1 或者更新的版本中都可以使用。测试时可以执行并发连接数,并指定SQL语句(可以在命令行上执行,也可以把SQL语句写入到参数文件中)。如果没有指定SQL语旬, mysqlslap 会自动生成查询schema的SELET语句。
MYSQL Benchmark Suite (sql-bench)
在MySQL的发行包中也提供了一款自己的基准测试套件,可以用于在不同数据库 服务器上进行比较测试。它是单线程的,主要用于测试服务器执行查询的速度。结果会显示哪种类型的操作在服务器上执行得更快。
sys bench
sysbench 是一款多线程系统压测工具。 它可以根据影响数据库服务器性能的各种因素来评估系统的性能。 例如,可以用来测试文件 I/0、 操作系统调度器 、 内存分配和传输速度、 POSIX钱程,以及数据库服务器等。 sys bench 支持 Lua脚本语言,Lua对于各种测试场景的设置可以非常灵活。 sysbench 是我们非常喜欢的一种全能测试工具,支持MySQL、 操作系 统和硬件的硬件测试。
我们主要介绍一下sysbench 。sys bench可以执行多种类型的基准测试,它不仅设计用来测试数据库的性能,也可以测试运行数据库的服务器的性能。下面先演示些非MySQL的测试场景,来测试各个子系统的性能。
参考次链接