zoukankan      html  css  js  c++  java
  • 第二章 MySQL基准测试

    基准测试是针对系统设计的一种压力测试,通常的目标是为了掌握系统的行为。但也有其他原因,如重新某个系统状态,或者是做新硬件的可靠性测试。我们将特别讨论一下sysbench,这是一款非常优秀的MySQL基准测试工具。

    2.1 为什么需要基准测试

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

    2.2 基准测试的策略

    基准测试有两种主要的策略:一是针对整个系统的整体测试,另外是单独测试mysql。这两种策略也被称为集成式(full-stack)以及单组件式(single-component)基准测试。

    2.2.1 测试何种指标

    吞吐量

    吞吐量指的是单位时间内的事务处理数。这一直是经典的数据库应用测试指标。一些标准的基准测试被广泛地引用,如TPC-C,而且很多数据库厂商都努力争取在这些测试中取得好成绩。这类基准测试主要针对在线事务处理(OLTP)的吞吐量,非常使用于多用户的交互式应用。常用的测试单位是每秒事务数(TPS),有时也采用每分钟事务数(TPM)。

    响应时间或者延迟

    这个指标用于测试任务所需的整体时间。根据具体的应用,测试的时间单位可能是微妙、毫秒、秒或者分钟。根据不同的时间单位可以计算出平均响应时间、最小响应时间、最大响应时间和所占百分比。最大响应时间通常意义不大,因为测试时间越长,最大响应时间也可能越大。通常可以使用百分比响应时间来替代最大响应时间。例如,如果95%的响应时间都是5毫秒,则表示任务在95%的时间段内都可以在5毫毛之内完成。

    并发性

    并发性是一个非常重要又经常被误解和无用的指标。Web服务器的并发性更准确的度量指标,应该是在任意时间有多少同时发生的并发请求。在应用的不同环节都可以测量相应的并发性。Web服务器的并发性,一般也会导致数据库的高并发,但服务器采用的语言和工具集对此都会有影响。注意不要将创建数据库连接和并发性搞混淆。一个设计良好的应用,同时可以打开成百上千的Mysql数据库服务器连接,但可能同时只有少数连接在执行查询。

    换句话说,并发性基准测试需要关注的是正在工作中的并发操作,或者是同时工作中的进程数或者连接数。并发性增加时,需要测量吞吐量是否下降,相应时间是否变长,如果是这样,应用可能就无法处理峰值压力。

    并发性的测量完全不同于相应时间和吞吐量。通常不是为了测试应用能达到的并发度,而是为了测试应用在不同并发下的性能。当然,数据库的并发性还是需要测量的。可以通过sysbench指定32、64或者128个线程的测试,然后在测试期间记录Mysql数据库的Threads_running状态值。

    可扩展性

    可扩展性至指的是,给系统增加一倍的工作,在理想情况下就能获得两倍的结果(即吞吐量增加一倍)。或者说,给系统增加一倍的资源(比如两倍的CPU数),就可以获得两倍的吞吐量。当然,同时性能(响应时间)也必须在可以接受的范围内。大多数系统是无法做到如此理想的线性扩展的。

     2.3 基准测试方法

    设计和执行基准测试之前,看一下如何避免一些常见的错误,这些错误可能导致测试结果无用或者不正确。

    使用真实数据的子集而不是全集;

    使用错误的数据分布,如使用均匀分布的数据测试,而系统的真实数据有很多热点区域(随机生成的测试数据通常无法模拟真实的数据分布);

    使用不真实的分布函数,例如假定所有用户的个人信息都会被平均读取;

    在多用户场景中在,只做单用户的测试;

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

    与真实用户行为不匹配;

    反复执行同一个查询;

    没有检查错误;

    忽略了系统预热的过程;

    使用默认的服务器配置;

    测试时间太短。

    只有避免了上述错误,才能走上改进测试质量的慢慢长路。

    2.3.1 设计和规划基准测试

    提出问题并明确目标——采用标准的基准测试——选择合适的测试方案

    不要使用TPC-H测试电子商务系统,在TPC的定义中,“TPC-H是即席查询和决策支持型应用 的基准测试”,因此不适合用来测试OLTP系统。

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

    2.3.3 获取系统性能和状态

    需要记录的数据包括系统状态和性能指标,诸如CPU使用率、磁盘I/O、网咯流量统计、SHOW GLOBAL STATUS计数器等。

    2.3.4 获得准确的测试结果

    2.3.5 运行基准测试并分析结果

    2.3.6 绘图的重要性

    2.4 基准测试工具

    2.4.1 集成式测试工具

    集成式测试和单组件式测试

    已有的集成式测试工具如下所示:

    ab

    ab是一个Apache HTTP服务器基准测试工具,它可以测试HTTP服务器每秒可以处理多少请求。如果测试的是Web应用服务,这个结果可以转换成整个应用每秒可以满足多少请求。这是个非常简单的工具,用途业有限,只能针对单个URL进行尽可能块的压力测试。

    http_load

    这个工具概念上和ab类似,也被设计为对Web服务器进行测试,但比ab要更加灵活。

    JMeter

    JMeter是一个Java应用程序,可以加载其他应用并测试其性能。

    2.4.2 单组件式测试工具

    mysqllap

    mysqllap可以模拟服务器的负载,并输出计时信息。

    sql-bench

    用于在不同数据库服务器上进行比较测试。单线程,主要用于测试服务器执行查询的速度。

    super smack

    super smack是一款用于mysql和postgreSQL的基准测试工具,可以提供压力测试和负载生成。

    Database Test Suite

    percona‘s TPCC-MYSQL Tool

    sysbench

    sysbench是一款多线程系统压测工具,它可以根据影响数据库服务器性能的各种因素来评估系统的性能。

    2.5 基准测试案列

     2.6 总结

  • 相关阅读:
    实验5 函数验证哥德巴赫猜想
    实验 7 综合练习四、编写程序,输入一批学生的成绩
    实验 7 综合练习三、编程,输入x后,根据下式计算并输出y值
    实验 7 综合练习二、填空
    实验 7 综合练习 一、填空
    输入n个整数,存入数组a中,分别按正序和逆序输出这些
    实验 6 数组1 输入n个整数,将它们存入数组a中。输出最大值和它所对应的下标
    实验5(2)编制程序,输入m、n(m≥n≥0)后,计算下列表达式的值并输出。 要求将计算阶乘的运算编写作函数fact(n),函数返回值的类型为float
    实验3:简单的分支与循环结构
    第七章:数组
  • 原文地址:https://www.cnblogs.com/myheart-new/p/11975607.html
Copyright © 2011-2022 走看看