MySQL基准测试

2024年 7月 22日 68.7k 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

阿里云 MySQL 5.7

阿里云 MySQL 5.7

华为云 MySQL 5.6

华为云 MySQL 5.7

腾讯云 MySQL 不限版本

百度云 MySQL 5.6

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对比

当前环境10.10.4.28:

model name: Intel® Xeon® 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

服务器 10.10.4.28 一级服务 二级服务 测试环境
eps 1171.72 1254.23 1263.24 1253.99
average Latency 0.85 0.80 0.79 0.80
95th percentile Latency 0.92 0.83 0.84 0.86
events (avg/stddev) 11718.0000/0.00 12543.0000/0.00 12633.0000/0.00 12541.0000/0.00
execution time (avg/stddev) 9.9814/0.00 9.9857/0.00 9.9855/0.00 9.9864/0.00

sysbench cpu --cpu-max-prime=20000 --threads=1 run

服务器 10.10.4.28 一级服务 二级服务 测试环境
eps 447.86 487.83 495.17 495.32
average Latency 2.23 2.05 2.02 2.02
95th percentile Latency 2.39 2.11 2.11 2.11
events (avg/stddev) 4479.0000/0.00 4879.0000/0.00 4952.0000/0.00 4954.0000/0.00
execution time (avg/stddev) 9.9913/0.00 9.9949/0.00 9.9943/0.00 9.9954/0.00

sysbench cpu --cpu-max-prime=30000 --threads=1 run

服务器 10.10.4.28 一级服务 二级服务 测试环境
eps 265.04 278.69 277.91 279.04
average Latency 3.77 3.59 3.60 3.58
95th percentile Latency 4.03 3.62 3.96 3.68
events (avg/stddev) 2651.0000/0.00 2787.0000/0.00 2780.0000/0.00 2791.0000/0.00
execution time (avg/stddev) 9.9960/0.00 9.9962/0.00 9.9993/0.00 9.9980/0.00

②限制执行次数

sysbench cpu --cpu-max-prime=10000 --threads=1 --time=100 --events=10000 run

服务器 10.10.4.28 一级服务 二级服务 测试环境
eps 1206.95 1240.22 1227.43 1246.33
average Latency 0.83 0.81 0.81 0.80
95th percentile Latency 0.89 0.83 0.87 0.84
events (avg/stddev) 10000.0000/0.00 10000.0000/0.00 10000.0000/0.00 10000.0000/0.00
execution time (avg/stddev) 8.2701/0.00 8.0505/0.00 8.1347/0.00 9.0111/0.00

sysbench cpu --cpu-max-prime=20000 --threads=1 --time=100 --events=10000 run

服务器 10.10.4.28 一级服务 二级服务 测试环境
eps 469.01 485.05 474.85 481.57
average Latency 2.13 2.06 2.10 2.08
95th percentile Latency 2.26 2.11 2.14 2.18
events (avg/stddev) 10000.0000/0.00 10000.0000/0.00 10000.0000/0.00 10000.0000/0.00
execution time (avg/stddev) 21.3038/0.00 20.6036/0.00 21.0463/0.00 20.7524/0.00

sysbench cpu --cpu-max-prime=30000 --threads=1 --time=100 --events=10000 run

服务器 10.10.4.28 一级服务 二级服务 测试环境
eps 267.98 279.92 274.7943 277.91
average Latency 3.73 3.57 3.64 3.60
95th percentile Latency 3.96 3.62 3.96 3.68
events (avg/stddev) 10000.0000/0.00 10000.0000/0.00 10000.0000/0.00 10000.0000/0.00
execution time (avg/stddev) 37.2967/0.00 35.7112/0.00 36.3767/0.00 35.9704/0.00

⑵双线程测试

①限制执行时间(默认执行时间为10秒,可忽略极小的时间误差)

sysbench cpu --cpu-max-prime=10000 --threads=2 run

服务器 10.10.4.28 一级服务 二级服务 测试环境
eps 2397.98 2475.64 2464.67 2473.22
average Latency 0.83 0.81 0.81 0.81
95th percentile Latency 0.89 0.83 0.84 0.84
events (avg/stddev) 11991.0000/31.00 12379.0000/22.00 12324.0000/286.00 12367.0000/19.00
execution time (avg/stddev) 9.9805/0.00 9.9846/0.00 9.9829/0.00 9.9846/0.00

②限制执行次数

sysbench cpu --cpu-max-prime=10000 --threads=2 --time=100 --events=10000 run

服务器 10.10.4.28 一级服务 二级服务 测试环境
eps 2337.62 2472.13 2424.60 2477.30
average Latency 0.85 0.81 0.82 0.81
95th percentile Latency 0.92 0.83 0.86 0.84
events (avg/stddev) 5000.0000/22.00 5000.0000/3.00 5000.0000/36.00 5000.0000/7.00
execution time (avg/stddev) 4.2673/0.00 4.0381/0.00 4.1171/0.00 4.0296/0.00

⑶四线程测试

①限制执行时间(默认执行时间为10秒,可忽略极小的时间误差)

sysbench cpu --cpu-max-prime=10000 --threads=4 run

服务器 10.10.4.28 一级服务 二级服务 测试环境
eps 4619.28 4916.11 4901.83 4870.43
average Latency 0.86 0.81 0.81 0.82
95th percentile Latency 0.94 0.83 0.84 0.84
events (avg/stddev) 11549.2500/24.39 12290.7500/8.79 12255.2500/354.96 12177.2500/149.96
execution time (avg/stddev) 9.9804/0.00 9.9823/0.00 9.9800/0.00 9.9842/0.00

②限制执行次数

sysbench cpu --cpu-max-prime=10000 --threads=4 --time=100 --events=10000 run

服务器 10.10.4.28 一级服务 二级服务 测试环境
eps 4407.69 4933.81 4917.99 4882.02
average Latency 0.90 0.81 0.81 0.82
95th percentile Latency 0.97 0.83 0.84 0.84
events (avg/stddev) 2500.0000/22.15 2500.0000/11.68 2500.0000/91.02 2500.0000/19.61
execution time (avg/stddev) 2.2604/0.00 2.0220/0.00 2.0264/0.00 2.0436/0.00

4.测试结果

新环境(包括一级服务、二级服务、测试环境)CPU在几组测试中较10.10.4.28的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。

除测试环境外,其余均为SSD。

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

服务器 10.10.4.28 一级服务 二级服务 测试环境
Write IOPS (MB/s) 169.77 306.03 256.56 258.10
average Latency (ms) 0.04 0.02 0.03 0.03
95th percentile Latency (ms) 0.07 0.04 0.04 0.03

⑵顺序读

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

服务器 10.10.4.28 一级服务 二级服务 测试环境
Read IOPS (MB/s) 1242.11 1282.01 1367.97 758.52
average Latency (ms) 0.01 0.01 0.01 0.02
95th percentile Latency (ms) 0.01 0.01 0.01 0.00

⑶随机写

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

服务器 10.10.4.28 一级服务 二级服务 测试环境
Write IOPS (MB/s) 87.11 145.15 117.45 10.47
average Latency (ms) 0.08 0.05 0.06 0.68
95th percentile Latency (ms) 0.23 0.14 0.16 0.15

⑷随机读

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

服务器 10.10.4.28 一级服务 二级服务 测试环境
Read IOPS (MB/s) 59.77 121.41 68.84 4.07
average Latency (ms) 0.27 0.13 0.24 4.02
95th percentile Latency (ms) 0.35 0.47 0.57 7.30

⑸混合随机读/写

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

服务器 10.10.4.28 一级服务 二级服务 测试环境
Read IOPS (MB/s) 34.77 76.10 50.39 3.31
Write IOPS (MB/s) 23.18 25.37 16.80 1.16
average Latency (ms) 0.12 0.07 0.10 1.55
95th percentile Latency (ms) 0.27 0.28 0.30 6.91

4.测试结果

性能排名:新一级服务>新二级服务>10.10.4.28>新测试环境。

五.内存基准测试

1.测试方法

⑴方法描述

测量以不同块大小传输一定数量的数据吞吐量大小,结果越大说明性能越佳。

⑵变量

不同内存;

内存传输总量;

每个block大小;

⑶衡量指标

①执行时间;

②events/s (eps):每秒events个数,此处events指的是传输一个block;

2.内存对比

/

3.测试数据

sysbench memory --memory-block-size=8k --memory-total-size=16G run

服务器 10.10.4.28 一级服务 二级服务 测试环境
eps 503209.2003 544868.9495 562664.8635 539987.0047
time elapsed(s) 4.1676 3.8489 3.7272 3.7841

sysbench memory --memory-block-size=16k --memory-total-size=16G run

服务器 10.10.4.28 一级服务 二级服务 测试环境
eps 412019.0265 465866.1728 463591.7495 467154.1717
time elapsed(s) 2.5450 2.2508 2.2619 2.1796

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.1.220:mysql5.6.47,单节点

一级服务:mysql5.7.28,MGR环境;

二级服务:mysql5.7.28,主从GTID复制环境;

新测试环境:mysql5.7.28,单节点

3.测试数据

创建测试库:

mysql> create database sbtest;

创建测试表,例:

sysbench --mysql-host=10.10.4.86 --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读写测试(s/i/u/d=14:1:1:1):

①4线程20秒

sysbench --threads=4 --time=20 --report-interval=5 --mysql-host=10.10.4.86 --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

服务器 10.10.1.220 一级服务 二级服务 测试环境
queries 23200 589140 459900 880240
QPS 1140.77 29452.01 22990.71 44004.74
transactions 1160 29457 22995 44012
TPS 57.04 1472.60 1149.54 2200.24
avg Latency (ms) 69.79 2.71 3.48 1.81
95th percentile Latency (ms) 511.33 3.19 5.18 2.71
Threads fairness (avg/stddev) 290.0000/2.92 7364.2500/2.49 5748.7500/66.97 11003.0000/101.61

②2线程1min

sysbench --threads=2 --time=60 --report-interval=10 --mysql-host=10.10.4.86 --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 >> /sysbench2.log

服务器 10.10.1.220 一级服务 二级服务 测试环境
queries 92280 954140 840460 1514180
QPS 1537.87 15901.51 14006.88 25235.04
transactions 4614 47707 42023 75709
TPS 76.89 795.08 700.34 1261.75
avg Latency (ms) 26.00 2.51 2.85 1.58
95th percentile Latency (ms) 99.33 2.76 3.13 1.67
Threads fairness (avg/stddev) 2307.0000/3.00 23853.5000/17.50 21011.5000/4.50 37854.5000/0.50

③4线程10min

sysbench --threads=4 --time=600 --report-interval=5 --mysql-host=10.10.4.86 --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 >> /sysbench3.log

服务器 10.10.1.220 一级服务 二级服务 测试环境
queries 664200 16058240 13982080 29937020
QPS 1106.70 26763.53 23303.32 49894.74
transactions 33210 802912 699104 1496851
TPS 55.34 1338.18 1165.17 2494.74
avg Latency (ms) 72.28 2.99 3.43 1.60
95th percentile Latency (ms) 502.20 3.62 5.09 2.00
Threads fairness (avg/stddev) 8302.5000/15.17 200728.0000/223.73 174776.0000/318.84 374212.7500/950.47

4.测试结果

OLTP表现:新测试环境>一级服务>二级服务>>10.10.1.220。

注:新测试环境OLTP表现较好的原因是测试环境不需要强安全性,因此innodb_flush_method设置为fsync,(即数据页刷盘不是有需求即刷盘,而是由OS决定),innodb_flush_log_at_trx_commit设置为0,(即每秒刷一次log buffer到redo log而非每次事务提交就刷盘),且未开binlog相关的设置,因此在内存未达瓶颈时性能较新一级服务和二级服务高一些。在补充测试中,将两参数调整为最安全模式(但未开binlog),测试的性能接近于一级服务的性能。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论