美文网首页
使用sysbench进行mysql基准测试

使用sysbench进行mysql基准测试

作者: 这货不是王马勺 | 来源:发表于2021-12-16 14:52 被阅读0次

    说明:因为举例的原因,本文测试量测试时间都很短,正式测试需要将测试时间尽可能延长至完全稳定。

    一.测试目的和策略

    数据库的基准测试是对数据库的性能指标进行定量的、可复现的、可对比的测试。基准测试可以理解为针对系统的一种压力测试。但基准测试不关心业务逻辑,更加简单、直接、易于测试,数据可以由工具生成,不要求真实数据。对数据库的基准测试的作用,就是分析在当前的配置下(包括硬件配置、OS、数据库设置等),数据库的性能表现,从而找出MySQL的性能阈值,并根据实际系统的要求调整配置。
    对MySQL的基准测试,有如下两种思路:
    (1)针对整个系统的基准测试:通过http请求进行测试,如通过浏览器、APP或postman等测试工具。该方案的优点是能够更好的针对整个系统,测试结果更加准确;缺点是设计复杂实现困难。
    (2)只针对MySQL的基准测试:优点和缺点与针对整个系统的测试恰好相反。
    在针对MySQL进行基准测试时,一般使用专门的工具进行,例如mysqlslap、sysbench等。

    二.测试工具

    1.工具选型

    我们选用工具sysbench。sysbench可以执行多种类型的基准测试,不仅可以测试数据库性能,还可以测试运行数据库的服务器性能,建议MySQL DBA都能了解sysbench测试。相比于mysqlslap,sysbench更通用、更强大,且更适合Innodb(因为模拟了许多Innodb的IO特性)。

    另外,考虑到云厂商不约而同的使用 sysbench 作为基准测试工具,sysbench 可能是比较正确的选型,参考网站如下:
    阿里云 MySQL 5.6 :https://help.aliyun.com/document_detail/53637.html
    阿里云 MySQL 5.7 :https://help.aliyun.com/document_detail/109376.html
    https://help.aliyun.com/document_detail/146103.html?spm=a2c4g.11186623.6.767.794d1b41SDuu61
    华为云 MySQL 5.6 :https://support.huaweicloud.com/pwp-rds/rds_swp_mysql_02.html
    华为云 MySQL 5.7 :https://support.huaweicloud.com/pwp-rds/rds_swp_mysql_03.html
    腾讯云 MySQL 不限版本 :https://cloud.tencent.com/document/product/236/8842
    百度云 MySQL 5.6 :https://cloud.baidu.com/doc/RDS/Performance_whitepaper.html

    2.sysbench的安装

    ⑴安装依赖:

    yum -y install make automake libtool pkgconfig libaio-devel mariadb-devel openssl-devel
    

    ⑵从github下载sysbench:
    https://github.com/akopytov/sysbench
    ⑶编译安装

    unzip sysbench-master.zip
    
    cd sysbench-master
    
    ./autogen.sh
    
    ./configure
    
    make
    
    make install
    

    ⑷检查

    sysbench --version
    

    显示sysbench 1.1.0
    说明安装完毕
    注:新脚本在/src/lua/目录下,如果是yum安装的则在/usr/share/sysbench/

    三.CPU基准测试

    1.测试方法

    ⑴方法描述
    测试使用64位整数,测试某个时间限制内计算素数(质数) 直到某个最大值的次数,或测试计算素数直到某个最大值达到指定次数的时间。比较当前环境和新环境的测试结果。
    ⑵变量
    ①CPU
    ②素数上限
    ③线程数
    ④素数计算次数上限
    ⑤执行时间上限
    ⑶衡量指标
    ①events/s (eps),即总线程每秒event数,一次event表示一轮素数计算;
    ②average Latency (ms),即events的平均耗时;
    ③95th percentile Latency (ms),即95%时间分布的events耗时,相对平均值更具参考价值;
    ④events (avg/stddev),平均每个线程完成event的数量/标准差;
    ⑤execution time (avg/stddev),每个线程平均执行时间/标准差;
    注:标准差越小说明越稳定,仅在多线程时标准差才有意义。

    2.CPU对比

    当前环境
    model name: Intel(R) Xeon(R) Gold 6240R CPU @ 2.40GHz
    stepping: 7
    cpu MHz: 2394.356
    cache size: 36608 KB

    3.测试数据

    ⑴单线程测试
    ①限制执行时间(默认执行时间为10秒,可忽略极小的时间误差)

    sysbench cpu --cpu-max-prime=10000 --threads=1 run
    
    服务器 旧环境 新环境
    eps 1171.72 1263.24
    average Latency 0.85 0.79
    95th percentile Latency 0.92 0.84
    events (avg/stddev) 11718.0000/0.00 12633.0000/0.00
    execution time (avg/stddev) 9.9814/0.00 9.9855/0.00
    sysbench cpu --cpu-max-prime=20000 --threads=1 run
    
    服务器 旧环境 新环境
    eps 447.86 495.17
    average Latency 2.23 2.02
    95th percentile Latency 2.39 2.11
    events (avg/stddev) 4479.0000/0.00 4952.0000/0.00
    execution time (avg/stddev) 9.9913/0.00 9.9943/0.00
    sysbench cpu --cpu-max-prime=30000 --threads=1 run
    
    服务器 旧环境 新环境
    eps 265.04 277.91
    average Latency 3.77 3.60
    95th percentile Latency 4.03 3.96
    events (avg/stddev) 2651.0000/0.00 2780.0000/0.00
    execution time (avg/stddev) 9.9960/0.00 9.9993/0.00

    ②限制执行次数

    sysbench cpu --cpu-max-prime=10000 --threads=1 --time=100 --events=10000 run 
    
    服务器 旧环境 新环境
    eps 1206.95 1227.43
    average Latency 0.83 0.81
    95th percentile Latency 0.89 0.87
    events (avg/stddev) 10000.0000/0.00 10000.0000/0.00
    execution time (avg/stddev) 8.2701/0.00 8.1347/0.00
    sysbench cpu --cpu-max-prime=20000 --threads=1 --time=100 --events=10000 run 
    
    服务器 旧环境 新环境
    eps 469.01 474.85
    average Latency 2.13 2.10
    95th percentile Latency 2.26 2.14
    events (avg/stddev) 10000.0000/0.00 10000.0000/0.00
    execution time (avg/stddev) 21.3038/0.00 21.0463/0.00
    sysbench cpu --cpu-max-prime=30000 --threads=1 --time=100 --events=10000 run
    
    服务器 旧环境 新环境
    eps 267.98 274.7943
    average Latency 3.73 3.64
    95th percentile Latency 3.96 3.96
    events (avg/stddev) 10000.0000/0.00 10000.0000/0.00
    execution time (avg/stddev) 37.2967/0.00 36.3767/0.00

    ⑵双线程测试
    ①限制执行时间(默认执行时间为10秒,可忽略极小的时间误差)

    sysbench cpu --cpu-max-prime=10000 --threads=2 run
    
    服务器 旧环境 新环境
    eps 2397.98 2464.67
    average Latency 0.83 0.81
    95th percentile Latency 0.89 0.84
    events (avg/stddev) 11991.0000/31.00 12324.0000/286.00
    execution time (avg/stddev) 9.9805/0.00 9.9829/0.00

    ②限制执行次数

    sysbench cpu --cpu-max-prime=10000 --threads=2 --time=100 --events=10000 run 
    
    服务器 旧环境 新环境
    eps 2337.62 2424.60
    average Latency 0.85 0.82
    95th percentile Latency 0.92 0.86
    events (avg/stddev) 5000.0000/22.00 5000.0000/36.00
    execution time (avg/stddev) 4.2673/0.00 4.1171/0.00

    ⑶四线程测试
    ①限制执行时间(默认执行时间为10秒,可忽略极小的时间误差)

    sysbench cpu --cpu-max-prime=10000 --threads=4 run
    
    服务器 旧环境 新环境
    eps 4619.28 4901.83
    average Latency 0.86 0.81
    95th percentile Latency 0.94 0.84
    events (avg/stddev) 11549.2500/24.39 12255.2500/354.96
    execution time (avg/stddev) 9.9804/0.00 9.9800/0.00

    ②限制执行次数

    sysbench cpu --cpu-max-prime=10000 --threads=4 --time=100 --events=10000 run 
    
    服务器 旧环境 新环境
    eps 4407.69 4917.99
    average Latency 0.90 0.81
    95th percentile Latency 0.97 0.84
    events (avg/stddev) 2500.0000/22.15 2500.0000/91.02
    execution time (avg/stddev) 2.2604/0.00 2.0264/0.00

    4.测试结果

    新环境CPU的性能整体较旧环境稍好一些,但在线程公平性上不如原CPU。

    四.I/O基准测试

    1.测试方法

    ⑴方法描述
    FileIO基准测试可以测试系统在不同I/O负载下的性能。测试的第一步是prepare阶段,生成测试用到的数据文件,生产的数据文件至少要比内存大。如果文件中的数据能完全放入内存中,则操作系统缓存了大部分数据,导致测试结果无法体现数据库的I/O密集型的工作负载。
    注:测试完成后要记得清除prepare阶段生成的测试文件。
    ⑵变量
    ①新旧环境服务器
    ②读写模式
    ③线程数
    ④文件大小
    ⑤执行时间上限
    ⑶衡量指标
    ①IOPS
    ②average Latency (ms),即请求平均时间;
    ③95th percentile Latency (ms),即95%时间分布的请求时间,相对平均值更具参考价值;

    2.I/O环境对比

    比较驱动器、RAID卡、RAID模式等。
    注:对于数据库系统应避免使用lvm,RAID模式最佳为RAID5。

    3.测试数据

    ⑴顺序写

    sysbench fileio --file-total-size=100G --file-test-mode=seqwr --time=300 prepare
    
    sysbench fileio --file-total-size=100G --file-test-mode=seqwr --time=300  run
    
    sysbench fileio --file-total-size=100G --file-test-mode=seqwr --time=300 cleanup
    
    服务器 旧环境 新环境
    Write IOPS (MB/s) 169.77 256.56
    average Latency (ms) 0.04 0.03
    95th percentile Latency (ms) 0.07 0.04

    ⑵顺序读

    sysbench fileio --file-total-size=100G --file-test-mode=seqrd --time=300 prepare
    
    sysbench fileio --file-total-size=100G --file-test-mode=seqrd --time=300  run
    
    sysbench fileio --file-total-size=100G --file-test-mode=seqrd --time=300 cleanup
    
    服务器 旧环境 新环境
    Read IOPS (MB/s) 1242.11 1367.97
    average Latency (ms) 0.01 0.01
    95th percentile Latency (ms) 0.01 0.01

    ⑶随机写

    sysbench fileio --file-total-size=100G --file-test-mode=rndwr --time=300 prepare
    
    sysbench fileio --file-total-size=100G --file-test-mode=rndwr --time=300  run
    
    sysbench fileio --file-total-size=100G --file-test-mode=rndwr --time=300 cleanup
    
    服务器 旧环境 新环境
    Write IOPS (MB/s) 87.11 117.45
    average Latency (ms) 0.08 0.06
    95th percentile Latency (ms) 0.23 0.16

    ⑷随机读

    sysbench fileio --file-total-size=100G --file-test-mode=rndrd --time=300 prepare
    
    sysbench fileio --file-total-size=100G --file-test-mode=rndrd --time=300  run
    
    sysbench fileio --file-total-size=100G --file-test-mode=rndrd --time=300 cleanup
    
    服务器 旧环境 新环境
    Read IOPS (MB/s) 59.77 68.84
    average Latency (ms) 0.27 0.24
    95th percentile Latency (ms) 0.35 0.57

    ⑸混合随机读/写

    sysbench fileio --file-total-size=100G --file-test-mode=rndrw --time=300 prepare
    
    sysbench fileio --file-total-size=100G --file-test-mode=rndrw --time=300 --file-rw-ratio=3  run
    
    sysbench fileio --file-total-size=100G --file-test-mode=rndrw --time=300 cleanup
    
    服务器 旧环境 新环境
    Read IOPS (MB/s) 34.77 50.39
    Write IOPS (MB/s) 23.18 16.80
    average Latency (ms) 0.12 0.10
    95th percentile Latency (ms) 0.27 0.30

    4.测试结果

    在随机读测试95%时间分布的请求时间一项中,新环境不如原环境,
    在混合随机读写中,95%时间分布的请求时间较高,写速度比原环境低,
    在其他测试项中,新环境IO性能高于旧环境。

    五.内存基准测试

    1.测试方法

    ⑴方法描述
    测量以不同块大小传输一定数量的数据吞吐量大小,结果越大说明性能越佳。
    ⑵变量
    不同内存;
    内存传输总量;
    每个block大小;
    ⑶衡量指标
    ①执行时间;
    ②events/s (eps):每秒events个数,此处events指的是传输一个block;

    2.内存对比

    3.测试数据

    sysbench memory --memory-block-size=8k --memory-total-size=16G run
    
    服务器 旧环境 新环境
    eps 503209.2003 562664.8635
    time elapsed(s) 4.1676 3.7272
    sysbench memory --memory-block-size=16k --memory-total-size=16G run
    
    服务器 旧环境 新环境
    eps 412019.0265 463591.7495
    time elapsed(s) 2.5450 2.2619

    4.测试结果

    新环境内存性能较旧环境有小幅提高。

    六.OLTP基准测试

    1.测试方法

    ⑴方法描述
    首先准备测试数据。用oltp_read_write.lua脚本来做读、写测试。还有很多其它类型的测试,比如只读测试、只写测试、删除测试、大批量插入测试等等。可找到对应的.lua脚本进行调用即可。并将输出结果导入文件中。
    ⑵变量
    ①不同数据库环境;
    ②线程数;
    ③时间上限;
    ④读写比例;
    ⑤测试表数量;
    ⑥测试表单表数据量;
    ⑶衡量指标
    ①一定时间内查询量及QPS(广义的query);
    ②一定时间内事务量即TPS;
    ③avg Latency (ms),请求的平均时间;
    ④95th percentile Latency (ms),请求的95%分布时间;
    ⑤Threads fairness (avg/stddev),对于多线程并行,每个线程分配的事务量/方差

    2.数据库环境对比

    原环境10.10.4.28,数据库版本5.6.45,传统主从复制
    新环境10.10.4.71,数据库版本5.7.28,主从gtid复制

    3.测试数据

    创建测试库:

    mysql> create database sbtest;
    

    创建测试表:

    sysbench --mysql-host=10.10.4.71 --mysql-port=3306 --mysql-user=wenjie.wang --mysql-password=123456 /app/sysbench-master/src/lua/oltp_common.lua --tables=10 --table_size=100000 prepare
    

    OLTP读写测试:

    sysbench --threads=4 --time=20 --report-interval=5 --mysql-host=10.10.4.71 --mysql-port=3306 --mysql-user=wenjie.wang --mysql-password=123456 /app/sysbench-master/src/lua/oltp_read_write.lua --tables=10 --table_size=100000 run >> /sysbench1.log
    
    服务器 旧环境 新环境
    queries 459900
    QPS 22990.71
    transactions 22995
    TPS 1149.54
    avg Latency (ms) 3.48
    95th percentile Latency (ms) 5.18
    Threads fairness (avg/stddev) 5748.7500/66.97

    4.测试结果

    (时间需要长一点直到稳定)

    相关文章

      网友评论

          本文标题:使用sysbench进行mysql基准测试

          本文链接:https://www.haomeiwen.com/subject/lzoufrtx.html