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  下载完了之后,就可以根据安装包中的安装文档一步步进行安装了(很简单)

  或者参考:https://gitee.com/yangsuai/sysbench?_from=gitee_search#https://gitee.com/link?target=http%3A%2F%2Fluajit.org%2Frunning.html%23opt_j

4.sysbench使用(验证过)

#!/bin/bash
host=192.168.10.146
port=3306
user=root
pass=123
db=sysbench
tablenum=10
table_size=10000
threadnum=8
timerun=30
luadir=/usr/share/sysbench

case $1 in
    create)
        mysql -h${host} -P${port} -u${user} -p${pass} -e "create database if not exists ${db}";;

    prepare)
    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 ;;

    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}  run ;;

    cleanup)
    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 ;;

    *)
    echo "选项错误,请重新输入"
    exit;;
esac

5.测试服务器的cpu性能 

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

  5.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测试结果

6.测试磁盘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上下文的切换和中断,因此在实际的生产中,最好要预估一下数据量和每天用户访问的次数等等。

 

posted on 2021-06-17 23:30  太白金星有点烦  阅读(317)  评论(0编辑  收藏  举报

导航