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 

     

      

  • 相关阅读:
    3.Appium运行时出现:Original error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device
    3.Python连接数据库PyMySQL
    2.Python输入pip命令出现Unknown or unsupported command 'install'问题解决
    2.Linux下安装Jenkins
    5.JMeter测试mysql数据库
    Android 4学习(7):用户界面
    Android 4学习(6):概述
    Android 4学习(5):概述
    Android 4学习(4):概述
    Android 4学习(3):概述
  • 原文地址:https://www.cnblogs.com/zmc60/p/14897775.html
Copyright © 2011-2022 走看看