使用sysbench进行mysql基准测试

2021-12-16  本文已影响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.测试结果

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

上一篇 下一篇

猜你喜欢

热点阅读