51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3434|回复: 2
打印 上一主题 下一主题

[转贴] 新手和专家都必须要掌握的基准测试,你了解多少

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:33
  • 签到天数: 532 天

    连续签到: 2 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2020-9-27 11:29:26 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    本帖最后由 测试积点老人 于 2020-9-27 11:30 编辑

     基准测试是MySQL新手和专家都必须要掌握地一项基本技能。基准测试是针对系统设计的一种压力测试。通常的目标是为了掌握系统的行为。
      基准测试的策略
      基准测试有两种主要的策略:一是针对整个系统的整体测试,另外是单独测试MySQL。这两种测试也被称为集成式以及单组件式基准测试。针对整个系统做集成式测试而不是单独测试MySQL的原因有以下几点:
      测试整个应用系统,包括web服务器、应用代码、网络和数据库是非常有用的,因为用户关注的并不是MySQL本身的性能,而是应用整体的性能。
      MySQL并非总是应用的瓶颈,通过整体的测试可以揭示这一点。
      只有对应用做整体测试,才能发现各部分之间的缓存带来的影响。
      整体应用的集成式测试更能揭示应用的真实表现,而单独组件的测试很难做到这一点。
      有时候不需要了解整个应用的情况,而只需要关注MySQL的性能,至少在项目初期可以 这样做。基于以下情况,可以选择只测试MySQL
      需要比较不同的schema或查询的性能
      针对应用中某个具体的测试
      为了避免漫长的基准测试,可以通过一个短期的基准测试,做快速的"周期循环",来检测某些调整后的效果
      测试何种指标
      考虑以下指标,看看如何满足测试的需求:
      吞吐量
      吞吐量指的是单位时间内的事务处理数。这一直是经典的数据库应用测试指标。这类基准测试主要针对在线事务处理OLTP的吞吐量,非常适用于多用户的交互式应用。常见的测试单位是每秒事务数,有些也采用每分钟事务数。
      响应时间或者延迟
      这个指标用于测试任务所需的整体时间。根据具体的应用,测试的时间单位可能是微秒、毫秒、秒或者分钟。根据不同的时间单位可以计算出平均响应时间、最小响应时间、最大响应时间和所占百分比。最大响应时间意义不大,因为测试时间越长,最大响应时间也可能越大。而且其结果通常不可重复,每次测试都可能获得不同的最大响应时间。因此,通常可以使用百分比响应时间来代替最大响应时间。例如,如果95%的响应时间都是5毫秒,则表示任务在95%的时间段内都可以在5毫秒内完成。
      并发性
      并发性是一个非常重要又经常被误解和误用的指标。例如,它经常被表示成多少用户在同一时间浏览一个web站点,经常使用的指标是有多少个会话。然而,HTTP协议是无状态的,大多数用户只是简单地读取浏览器上显式地信息,这并不等于web服务器的并发性。而且web服务器的并发性也不等同于数据库的并发性,而仅仅只表示会话存储机制可以处理多少数据的能力。web服务器的并发性更准确的度量指标,应该是任意时间内有多少同时发生的并发请求。
      在应用的不同缓解都可以测量相应的并发性。web服务器的高并发,一般也会导致数据库的高并发,但服务器采用的语言和工具集对此都会有影响。注意不要将创建数据库连接和并发性搞混淆。一个设计良好的应用,同时可以打开成百上千个MySQL数据库服务器连接,但可能同时只有少数连接在执行查询。所以说一个web站点"同时有50000个用户"访问,却可能只有10-15个并发请求到MySQL数据库
      换句话说,并发性基准测试需要关注的是正在工作中的并发操作,或者是同时工作中的线程数或者连接数。当并发增加,需要测量吞吐量是否下降,响应时间是否变长,如果是这样,应用可能就无法处理峰值压力。
      并发性测试通常不是为了测试应用能达到的并发度,而是为了测试应用在不同并发下的性能。可以通过sysbench指定32、64或者128个线程的测试,然后在测试期间记录MySQL数据库的Threads_running状态值。
      可扩展性
      在系统的业务压力可能发生变化的情况下,测试可扩展性就非常必要了。可扩展性指的是,给系统增加一倍的工作,在理想情况下就能获得两倍的结果(即吞吐量增加一倍)。或者说,给系统增加一倍的资源就可以获得两倍的吞吐量。同时性能也必须在可以接收的范围内。大多数系统是无法做到如此理想的线性扩展的。随着压力的变化,吞吐量和性能都可能越来越差。
      可扩展性指标对于容量规范非常有用,它可以提供其他测试无法提供的信息,来帮助发现应用的瓶颈。
      归根结底,应该测试那些对用户来说最重要的指标。因此应该尽可能地去收集一些需求,比如,什么样地响应时间是可以接受的,期待多少的并发性,等等。然后基于这些需求来设计基准测试,避免目光短浅地只关注部分指标,而忽略其他指标。
      sysbench
      sysbench可以执行多种类型的基准测试,它不仅设计用来测试数据库的性能,也可以测试运行数据库的服务器的性能。
      sysbench的基本语法
    1. sysbench [options]... [testname] [command]
    复制代码
    命令
      command是sysbench要执行的命令,包括prepare,run和cleanup,顾名思义,prepare是为测试预先准备数据,run是执行正式的测试,cleanup是在测试完成后对数据库进行清理。
      测试名
      testname指定了要进行的测试,在老版本的sysbench中,可以通过–test参数指定测试的脚本;而在新版本中,–test参数已经声明为废弃,可以不使用–test,或者直接指定脚本。
      例如,如下两种方法效果是一样的:
    1. sysbench --test=/usr/share/sysbbench/tests/include/oltp_legacy/oltp.lua sysbench /usr/share/sysbbench/tests/include
    复制代码
    yum安装的sysbench的测试脚本默认在/usr/share/sysbench下面及其下面的文件夹
      选项
      sysbench的参数有很多,其中常见的包括

    1. --mysql-host:MySQL服务器主机名,默认localhost;如果在本机上使用localhost报错,提示无法连接MySQL服务器,改成本机的IP地址应该就可以了。

    2. --mysql-port:MySQL服务器端口,默认3306

    3. --mysql-user:用户名

    4. --mysql-password:密码

    5. --mysql-db=test    在test这个数据库进行测试,默认sbtest

    6. --mysql-socket=/data/mysql/datanode1/node1.soc 指定socket
    复制代码
    MySQL执行参数

    1. --oltp-test-mode:执行模式,包括simple、nontrx和complex,默认是complex。simple模式下只测试简单的查询;nontrx不仅测试查询,还测试插入更新等,但是不使用事务;complex模式下测试最全面,会测试增删改查,而且会使用事务。可以根据自己的需要选择测试模式。

    2. --oltp-tables-count:测试的表数量,根据实际情况选择

    3. --oltp-table-size:测试的表的大小,根据实际情况选择

    4. --oltp-read-olny=off  读写混合

    5. --threads:客户端的并发连接数

    6. --time:测试执行的时间,单位是秒,该值不要太短,可以选择120

    7. --report-interval:生成报告的时间间隔,单位是秒,如10

    8. --max-requests=0   设置最大请求,0为不限制,想多少请求都可以,在限定的时间内

    9. --percentile=99   去签名99%的数据进行分析
    复制代码
     sysbench的CPU基准测试
      服务器的CPU配置如下


    1. [root[url=home.php?mod=space&uid=21364]@cy[/url] ~]# cat /proc/cpuinfo

    2. processor   : 0

    3. vendor_id   : GenuineIntel

    4. cpu family  : 6

    5. model       : 79

    6. model name  : Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz

    7. stepping    : 1

    8. microcode   : 0x1

    9. cpu MHz     : 2394.456

    10. cache size  : 35840 KB

    11. physical id : 0

    12. siblings    : 1

    13. core id     : 0

    14. cpu cores   : 1

    15. apicid      : 0

    16. initial apicid  : 0

    17. fpu     : yes

    18. fpu_exception   : yes

    19. cpuid level : 13

    20. wp      : yes
    复制代码
    在这台服务器上运行如下的测试

    1. [root@cy ~]# sysbench --test=cpu --cpu-max-prime=20000 run




    2. Threads started!




    3. CPU speed:

    4.     events per second:   295.01




    5. General statistics:

    6.     total time:                          10.0008s

    7.     total number of events:              2951




    8. Latency (ms):

    9.          min:                                    3.27

    10.          avg:                                    3.39

    11.          max:                                   11.17

    12.          95th percentile:                        3.55

    13.          sum:                                 9994.76




    14. Threads fairness:

    15.     events (avg/stddev):           2951.0000/0.00

    16.     execution time (avg/stddev):   9.9948/0.00
    复制代码
    第二台服务器配置

    1. [root@iZniul0kz47rtgZ ~]# cat /proc/cpuinfo

    2. processor   : 0

    3. vendor_id   : GenuineIntel

    4. cpu family  : 6

    5. model       : 85

    6. model name  : Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz

    7. stepping    : 7

    8. microcode   : 0x1

    9. cpu MHz     : 2500.002

    10. cache size  : 36608 KB

    11. physical id : 0

    12. siblings    : 1

    13. core id     : 0

    14. cpu cores   : 1

    15. apicid      : 0

    16. initial apicid  : 0

    17. fpu     : yes

    18. fpu_exception   : yes

    19. cpuid level : 22

    20. wp      : yes
    复制代码
     执行测试

    1. [root@iZniul0kz47rtgZ ~]# sysbench --test=cpu --cpu-max-prime=20000 run




    2. CPU speed:

    3.     events per second:   343.75




    4. General statistics:

    5.     total time:                          10.0024s

    6.     total number of events:              3439




    7. Latency (ms):

    8.          min:                                    2.78

    9.          avg:                                    2.91

    10.          max:                                   23.83

    11.          95th percentile:                        2.97

    12.          sum:                                 9999.19




    13. Threads fairness:

    14.     events (avg/stddev):           3439.0000/0.00

    15.     execution time (avg/stddev):   9.9992/0.00
    复制代码
    可以看到CPU运行速度第二台服务器比第一台要快
      sysbench的文件IO测试
      文件IO基准测试可以测试系统在不同IO负载下的性能。这对于比较不同的磁盘驱动器、RAID卡、不同的RAID模式,都很有帮助。可以根据测试结果来调整IO子系统。文件IO基准测试模拟了很多InnoDB的IO特性
      测试第一步是准备阶段,生成测试用到的数据文件,生成的数据文件至少比内存大。如果文件中的数据能完全放入内存中,则[url=]操作系统[/url]缓存大部分的数据,导致测试结果无法体现IO密集型的工作负载
      首先创建一个数据集

    1. [root@cy ~]# sysbench --test=fileio --file-total-size=30G prepare
    复制代码
    这个命令会在当前工作目录下创建测试文件,后续的运行阶段将通过读写这些文件进行测试
      针对不同的IO类型有不同的测试选项
      seqwr:顺序写入
      seqrewr:顺序重写
      seqrd:顺序读取
      rndrd:随机读取
      rndwr:随机写入
      rdnrw:混合随机读/写
      下面的命令运行文件IO混合随机读/写基准测试




    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    昨天 09:33
  • 签到天数: 532 天

    连续签到: 2 天

    [LV.9]测试副司令

    2#
     楼主| 发表于 2020-9-27 11:37:02 | 只看该作者
    1. [root@cy ~]# sysbench --test=fileio --file-total-size=30G --file-test-mode=rndrw --max-time=300 --max-requests=0 run
    复制代码
     得到的结果

    1. File operations:

    2.     reads/s:                      902.00

    3.     writes/s:                     601.34

    4.     fsyncs/s:                     1924.64


    5. Throughput:

    6.     read, MiB/s:                  14.09

    7.     written, MiB/s:               9.40


    8. General statistics:

    9.     total time:                          300.0067s

    10.     total number of events:              1028295


    11. Latency (ms):

    12.          min:                                    0.00

    13.          avg:                                    0.29

    14.          max:                                 1949.82

    15.          95th percentile:                        0.73

    16.          sum:                               298892.25

    17. Threads fairness:

    18.     events (avg/stddev):           1028295.0000/0.00

    19.     execution time (avg/stddev):   298.8922/0.00
    复制代码
    测试完成后,运行清除操作,删除第一步生成的测试文件
    1. [root@cy ~]# sysbench --test=fileio --file-total-size=30G cleanup
    复制代码
    sysbench MySQL基准测试
      生成3张表,每个表插入100000条数据

    1. [root@cy ~]# sysbench  /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --table_size=100000 --threads=20 --oltp-tables-count=3  --mysql-db=test --mysql-user=root --mysql-host=106.13.177.139 --mysql-password=123.com prepare
    复制代码
    数据测试
    1. sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp-table-size=100000 --oltp-tables-count=3 --mysql-db=test --mysql-user=root --mysql-host=106.13.177.139 --mysql-password=123.com --time=60 --max-requests=0 --threads=8 --report-interval=10 run
    复制代码
    --threads=8     //线程数为8
      --time=60       //测试时间为60s
      --report-interval=10  //报告打印周期为10s,每10s打印一次
      --oltp-read-only=off  //非只读操作测试
      测试结果


    1. [ 10s ] thds: 8 tps: 92.57 qps: 1896.81 (r/w/o: 1332.89/119.86/444.06) lat (ms,95%): 253.35 err/s: 1.90 reconn/s: 0.00

    2. [ 20s ] thds: 8 tps: 23.90 qps: 477.92 (r/w/o: 334.41/38.90/104.60) lat (ms,95%): 893.56 err/s: 0.00 reconn/s: 0.00

    3. [ 30s ] thds: 8 tps: 24.00 qps: 478.80 (r/w/o: 335.00/42.60/101.20) lat (ms,95%): 1032.01 err/s: 0.00 reconn/s: 0.00

    4. [ 40s ] thds: 8 tps: 26.60 qps: 531.20 (r/w/o: 371.60/53.20/106.40) lat (ms,95%): 1304.21 err/s: 0.00 reconn/s: 0.00

    5. [ 50s ] thds: 8 tps: 21.30 qps: 427.00 (r/w/o: 298.90/41.70/86.40) lat (ms,95%): 1235.62 err/s: 0.00 reconn/s: 0.00

    6. [ 60s ] thds: 8 tps: 18.50 qps: 368.40 (r/w/o: 257.70/40.90/69.80) lat (ms,95%): 1453.01 err/s: 0.00 reconn/s: 0.00

    7. SQL statistics:

    8.     queries performed:

    9.         read:                            29344

    10.         write:                           3390

    11.         other:                           9148

    12.         total:                           41882

    13.     transactions:                        2077   (32.16 per sec.)

    14.     queries:                             41882  (648.45 per sec.)

    15.     ignored errors:                      19     (0.29 per sec.)

    16.     reconnects:                          0      (0.00 per sec.)




    17. General statistics:

    18.     total time:                          64.5861s

    19.     total number of events:              2077




    20. Latency (ms):

    21.          min:                                   10.06

    22.          avg:                                  235.33

    23.          max:                                 7159.95

    24.          95th percentile:                     1013.60

    25.          sum:                               488775.18




    26. Threads fairness:

    27.     events (avg/stddev):           259.6250/35.75

    28.     execution time (avg/stddev):   61.0969/1.45
    复制代码
    queries:查询总数及qps
      transactions:事务总数及tps
      Latency-95th percentile:前95%的请求的最大响应时间,本例中是1013毫秒,这个延迟非常大,是因为我用的MySQL服务器性能很差;在正式环境中这个数值是绝对不能接受的。
      清除数据

    1. sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --oltp-tables-count=3 --oltp-table-size=100000 --mysql-user=root --mysql-host=106.13.177.139 --mysql-password=123.com --mysql-db=test cleanup
    复制代码
    sysbench的其他特性
      内存
      测试内存的连续读写性能
      线程
      测试线程调度器的性能。对于高负载情况下测试线程调度器的行为非常有用。
      互斥锁
      测试互斥锁的性能,方式是模拟所有线程在同一时刻并发运行,并都短暂请求互斥锁(互斥锁mutex是一种数据结构,用来对某些资源进行排他性访问控制,防止因并发访问导致问题)。
      顺序写
      测试顺序写的性能。这对于测试系统的实际性能瓶颈很重要。可以用来测试RAID控制器的高速缓存的性能状况。

    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-28 05:37 , Processed in 0.075398 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表