zoukankan      html  css  js  c++  java
  • 1.Sysbench工具使用

    1.前言

      Sysbench工具目前是很多互联网公司专门做数据库压测工具之一,相较于于其他的压测工具,它更受到众多互联网公司的青睐,因此,本次主要想要对Sysbench工具的使用一次比较全面的总结。

    2.工具背景

      sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。以下操作都将以支持MySQL数据库为例进行。

    3.工具下载安装

      该工具可以在github上进行下载,下载地址是:https://github.com/akopytov/sysbench/releases/tag/1.0.20  下载完了之后,就可以根据安装包中的安装文档一步步进行安装了(很简单)

    4.安装出现的问题(如果没有请自动忽略)

      我们在安装sysbench工具是可能会遇到如下问题:

      错误:error while loading shared libraries: libmysqlclient.so.20

      解决

     1 1.首先查看服务器上是否存在该文件
     2     -->find / --name   'libmysqlclient*'
     3 
     4 2.如果有的话,将这个文件拷贝到/usr/local/lib目录下(或者做一个软件)
     5     --> ln -s  源文件路径    /usr/local/lib/libmysqlclient.so.20
     6 
     7 3.进入/etc/ld.so.conf文件中添加一行
     8     -->/usr/local/lib
     9 
    10 4.执行ldconfig -v更新一下配置即可
    11     -->/sbin/ldconfig -v

    5.Sysbench使用

      首先先要声明一下的是,目前网络上有很多旧版的sysbench,比如说0.4、0.5等等,但是目前sysbench工具最小的是1.0版本,因此,这里我建议再做压测的时候,都可以使用最新版本,因为里面修复了旧版本之前的版本,这里这要记录新版本1.0的使用。

      5.1对数据库的压力测试(这里针对) 

    1.设置环境变量设置(根据自己实际情况来)
    
        host=192.168.31.201
        port=3307
        user=sysbench
        pass=123
    
        db=sysbench
        tablenum=10
        table_size=10000
        threadnum=8
        timerun=30
    
        rootdir=~   ;
        bindir=$rootdir/apps/sysbench-1.0.20/src;
        luadir=$bindir/lua;
    
    2.开始测试
         
        2.0  -创建数据库    
        mysql -h${host} -P${port} -u${user} -p${pass} -e "create database if not exists ${db} "
    
        2.1   针对oltp事务进行压测(prepare(装载数据)-->run(运行)-->cleanup(清除数据))
               -->cd $luadir
               --> ../sysbench oltp_read_write.lua  --mysql-user=${user} --mysql-password="${pass}" --mysql-host=$host --mysql-port=$port --mysql-db=${db} --table-size=${table_size} --tables=${tablenum}  prepare
        
               --cd $luadir
               --> ../sysbench oltp_read_write.lua --threads=${threadnum} --mysql-user=${user} --mysql-password="${pass}" --mysql-host=$host --mysql-port=$port --mysql-db=${db} --report-interval=1 --table-size=${table_size} --tables=${tablenum}  run
    
                -->cd $luadir
                --> ../sysbench oltp_read_write.lua --threads=${threadnum} --mysql-user=${user} --mysql-password="${pass}" --mysql-host=$host --mysql-port=$port --mysql-db=${db} --report-interval=1 --table-size=${table_size} --tables=${tablenum}  cleanup
                

      2.3测试结果如下  

     1 Threads started!
     2 
     3 [ 1s ] thds: 8 tps: 221.41 qps: 4560.78 (r/w/o: 3211.39/898.59/450.79) lat (ms,95%): 42.61 err/s: 0.00 reconn/s: 0.00
     4 [ 2s ] thds: 8 tps: 239.29 qps: 4763.76 (r/w/o: 3327.02/959.16/477.58) lat (ms,95%): 41.10 err/s: 0.00 reconn/s: 0.00
     5 [ 3s ] thds: 8 tps: 243.98 qps: 4890.61 (r/w/o: 3433.73/967.92/488.96) lat (ms,95%): 38.94 err/s: 0.00 reconn/s: 0.00
     6 [ 4s ] thds: 8 tps: 244.87 qps: 4866.44 (r/w/o: 3404.21/972.49/489.74) lat (ms,95%): 37.56 err/s: 0.00 reconn/s: 0.00
     7 [ 5s ] thds: 8 tps: 242.14 qps: 4834.71 (r/w/o: 3378.89/972.54/483.27) lat (ms,95%): 41.10 err/s: 0.00 reconn/s: 0.00
     8 [ 6s ] thds: 8 tps: 235.99 qps: 4752.88 (r/w/o: 3335.91/943.98/472.99) lat (ms,95%): 38.94 err/s: 0.00 reconn/s: 0.00
     9 [ 7s ] thds: 8 tps: 212.99 qps: 4208.77 (r/w/o: 2933.84/849.95/424.98) lat (ms,95%): 50.11 err/s: 0.00 reconn/s: 0.00
    10 [ 8s ] thds: 8 tps: 214.01 qps: 4308.17 (r/w/o: 3018.12/861.03/429.02) lat (ms,95%): 57.87 err/s: 0.00 reconn/s: 0.00
    11 [ 9s ] thds: 8 tps: 180.01 qps: 3624.24 (r/w/o: 2543.17/721.05/360.02) lat (ms,95%): 82.96 err/s: 0.00 reconn/s: 0.00
    12 [ 10s ] thds: 8 tps: 215.00 qps: 4270.92 (r/w/o: 2988.94/851.98/429.99) lat (ms,95%): 51.02 err/s: 0.00 reconn/s: 0.00
    13 SQL statistics:
    14     queries performed:
    15         read:                            31612
    16         write:                           9032
    17         other:                           4516
    18         total:                           45160
    19     transactions:                        2258   (225.05 per sec.)
    20     queries:                             45160  (4501.08 per sec.)
    21     ignored errors:                      0      (0.00 per sec.)
    22     reconnects:                          0      (0.00 per sec.)
    23 
    24 General statistics:
    25     total time:                          10.0320s
    26     total number of events:              2258
    27 
    28 Latency (ms):
    29          min:                                   14.15
    30          avg:                                   35.51
    31          max:                                  127.24
    32          95th percentile:                       48.34
    33          sum:                                80186.71
    34 
    35 Threads fairness:
    36     events (avg/stddev):           282.2500/1.92
    37     execution time (avg/stddev):   10.0233/0.00
    oltp_read_write测试结果

       2.4 这里除了可以测试上述的oltp事务的混合读写(这个也是数据库经常用到的脚本)之外,还可以测是oltp事务的其它特性(例如:oltp_read_only.lua:只读 等等)

    6.测试服务器的cpu性能 

    # 素数上限2万,默认10秒,2个线程
    sysbench cpu --cpu-max-prime=20000 --threads=2 run

      6.1测试结果  

    [root@node01 tmp]# sysbench cpu --cpu-max-prime=20000 --threads=2 run
    sysbench 1.1.0-bbee5d5 (using bundled LuaJIT 2.1.0-beta3)
    
    Running the test with following options:
    Number of threads: 2   //指定线程个数
    Initializing random number generator from current time
    
    
    Prime numbers limit: 20000   //每个线程产生的素数上限均为2万个
    
    Initializing worker threads...
    
    Threads started!
    
    CPU speed:
        events per second:   446.69   //所有线程每秒完成了446.69次event
    
    Throughput:
        events/s (eps):                      446.6855
        time elapsed:                        10.0026s  //共耗时10秒
        total number of events:              4468     //在10秒内共完成了4468次event
    
    Latency (ms):
             min:                                    2.09   //完成1次event最少耗时2.09ms
             avg:                                    4.44   //完成所有events平均耗时4.44ms
             max:                                   24.57   //完成1次event最大耗时24.57毫秒
             95th percentile:                       13.22   //95%的events完成都在13.22ms完成
             sum:                                19842.20   //每个线程耗时10ms,2个线程总共耗时20ms
    
    Threads fairness:
        events (avg/stddev):           2234.0000/0.00  //平均每完成2234次event,标准差是0.00
        execution time (avg/stddev):   9.9211/0.02     //每个线程平均耗时10秒,标准差为0.02event:表示完成了几轮素数计算stddev:标准差,在相同时间内,多个线程分别完成素数计算次数是否稳定,如果数值越低,那么多个线程的结果就越接近(即越稳定),该线程对单线程无意义。
    CPU测试结果

    7.测试磁盘iops 

      #一定要到你测试的磁盘目录下执行,否则可能测试系统盘了,因此如果我们想要做数据库下的磁盘的iops的话,那么我们一定要到有数据库的数据目录下进行测试(以下三步走)
       sysbench fileio --file-total-size=1G --file-test-mode=rndrw --time=30 --max-requests=0 prepare
       sysbench fileio --file-total-size=1G --file-test-mode=rndrw --time=30 --max-requests=0 run
       sysbench fileio --file-total-size=1G --file-test-mode=rndrw --time=30 --max-requests=0 cleanup

    ##主要这里有些参数用的是默认值,比如 : --file-num用的是默认值128 ,因此如果用默认的128的话,那么可能测出的iops将达不到预想的结果
    ##这里面的参数都可以进行调整,以我们实际的情况为准,这个很重要!

       测试结果如下

    Threads started!
    
    
    File operations:
        reads/s:                      5941.19
        writes/s:                     3960.78
        fsyncs/s:                     99.03
    
    Throughput:
        read, MiB/s:                  92.83
        written, MiB/s:               61.89
    
    General statistics:
        total time:                          30.0054s
        total number of events:              300129
    
    Latency (ms):
             min:                                    0.00
             avg:                                    0.10
             max:                                    8.27
             95th percentile:                        0.42
             sum:                                29799.22
    
    Threads fairness:
        events (avg/stddev):           300129.0000/0.00
        execution time (avg/stddev):   29.7992/0.00
    
    ##这里用的默认的生成128个文件,其中read, MiB/s + written, MiB/s之和是我们磁盘io的总带宽,换算成iops的话,需要知道此事磁盘的一个block块的大小(比如说4k),那么此时的iops的结果为:(92.83+61.89)*1024/4=39608.32   表示磁盘每秒可混合读写30000次。
    View:iops测试结果

        注意:这里有一个问题,如果生成的文件总和大小很大,且生成的文件数很多的话,那么可能测试结果就不是很精确了,因为,由于磁盘能力的显示,在快速读写文件同时,会发生大量的cpu上下文的切换和中断,因此在实际的生产中,最好要预估一下数据量和每天用户访问的次数等等。

    8.总结:

      首先,以上的三中压测都是比较简单的压缩,我们可以根据实际情况进行参数的调整和添加,其次是我们在生产中磁盘的iops,一般常用的工具是fio 

     

      

  • 相关阅读:
    HttpRunner3.X
    基于C++的ByteBuf封装
    关于matlab的配色
    关于样本方差的无偏估计
    使用Python求解Nonogram
    菜鸡的一些力扣记录
    LeetCode链表练习
    C语言中的链表
    Python中的链表简介
    Nebula Graph 源码解读系列 | Vol.03 Planner 的实现
  • 原文地址:https://www.cnblogs.com/zmc60/p/14897775.html
Copyright © 2011-2022 走看看