本文测试下在阿里云上自建MySQL的性能,主要测试工具sysbench,虚拟机环境:阿里云
1 MySQL启动脚本
服务器配置:4核8G,PL0磁盘,ecs.g6.xlarge
为了方便切换版本和重现,我们使用Docker部署,先安装并启用docker:
yum install -y docker
service docker start
yum install -y docker
service docker start
脚本如下:
VOLUME="$HOME/docker_data/mysql"
MYSQL_ROOT_PASS="mysql123"
docker ps -q -a --filter "name=$NAME" | xargs -I {} docker rm -f {}
--volume "$VOLUME":/var/lib/mysql
--env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASS
#!/bin/bash
NAME="mysql"
PUID="1000"
PGID="1000"
VOLUME="$HOME/docker_data/mysql"
MYSQL_ROOT_PASS="mysql123"
mkdir -p $VOLUME
docker ps -q -a --filter "name=$NAME" | xargs -I {} docker rm -f {}
docker run
--hostname $NAME
--name $NAME
--volume "$VOLUME":/var/lib/mysql
--env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASS
--env PUID=$PUID
--env PGID=$PGID
-p 3306:3306
--detach
--restart always
mysql:5.7
#!/bin/bash
NAME="mysql"
PUID="1000"
PGID="1000"
VOLUME="$HOME/docker_data/mysql"
MYSQL_ROOT_PASS="mysql123"
mkdir -p $VOLUME
docker ps -q -a --filter "name=$NAME" | xargs -I {} docker rm -f {}
docker run
--hostname $NAME
--name $NAME
--volume "$VOLUME":/var/lib/mysql
--env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASS
--env PUID=$PUID
--env PGID=$PGID
-p 3306:3306
--detach
--restart always
mysql:5.7
2 测试机准备
测试机:通用性,4核8G,ecs.g6.xlarge,需要单独部署一台,不要和服务器那台共享
安装下MySQL的64位二进制文件,可以在这里下载,并安装sysbench
yum install -y sysbench
3 压测准备
提高连接限制
mysql -h 172.20.3.69 -u root -pmysql123 -e "set global max_connections = 10000;"
mysql -h 172.20.3.76 -u root -pmysql123 -e "set global max_prepared_stmt_count=50000;"
mysql -h 172.20.3.69 -u root -pmysql123 -e "set global max_connections = 10000;"
mysql -h 172.20.3.76 -u root -pmysql123 -e "set global max_prepared_stmt_count=50000;"
mysql -h 172.20.3.69 -u root -pmysql123 -e "set global max_connections = 10000;"
mysql -h 172.20.3.76 -u root -pmysql123 -e "set global max_prepared_stmt_count=50000;"
创建测试所需的库:
mysqladmin -h 172.20.3.69 -u root -pmysql123 create sbtest
mysqladmin -h 172.20.3.69 -u root -pmysql123 create sbtest
mysqladmin -h 172.20.3.69 -u root -pmysql123 create sbtest
创建测试数据,这里我选的是oltp场景:
sysbench --mysql-host=172.20.3.69 --mysql-user=root --mysql-password=mysql123 /usr/share/sysbench/oltp_common.lua --tables=10 --table_size=100000 prepare
sysbench --mysql-host=172.20.3.69 --mysql-user=root --mysql-password=mysql123 /usr/share/sysbench/oltp_common.lua --tables=10 --table_size=100000 prepare
sysbench --mysql-host=172.20.3.69 --mysql-user=root --mysql-password=mysql123 /usr/share/sysbench/oltp_common.lua --tables=10 --table_size=100000 prepare
4 压测
开32线程:
sysbench --threads=32 --time=20 --report-interval=5 --mysql-host=172.20.3.69 --mysql-port=3306 --mysql-user=root --mysql-password=mysql123 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=100000 run
sysbench --threads=32 --time=20 --report-interval=5 --mysql-host=172.20.3.69 --mysql-port=3306 --mysql-user=root --mysql-password=mysql123 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=100000 run
sysbench --threads=32 --time=20 --report-interval=5 --mysql-host=172.20.3.69 --mysql-port=3306 --mysql-user=root --mysql-password=mysql123 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=100000 run
结果:
transactions: 36195 (1808.14 per sec.)
queries: 723900 (36162.79 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
total number of events: 36195
events (avg/stddev): 1131.0938/23.49
execution time (avg/stddev): 20.0069/0.00
SQL statistics:
queries performed:
read: 506730
write: 144780
other: 72390
total: 723900
transactions: 36195 (1808.14 per sec.)
queries: 723900 (36162.79 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0164s
total number of events: 36195
Latency (ms):
min: 5.38
avg: 17.69
max: 84.91
95th percentile: 33.72
sum: 640220.02
Threads fairness:
events (avg/stddev): 1131.0938/23.49
execution time (avg/stddev): 20.0069/0.00
SQL statistics:
queries performed:
read: 506730
write: 144780
other: 72390
total: 723900
transactions: 36195 (1808.14 per sec.)
queries: 723900 (36162.79 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0164s
total number of events: 36195
Latency (ms):
min: 5.38
avg: 17.69
max: 84.91
95th percentile: 33.72
sum: 640220.02
Threads fairness:
events (avg/stddev): 1131.0938/23.49
execution time (avg/stddev): 20.0069/0.00
结果比较复杂,最后我会有一个汇总表和图
这里主要看transaction和query,可以粗略理解为读和写。
query很好理解,transaction包含了,可以看代码:
- 查询:10个点查 + 1个范围查 + 1个Sum + 1个Order By + 1个Distinct
- 一个带索引更新、一个不带索引更新、1个DELETE / INSERT
可见,对于各种场景,还是覆盖的比较全面的。
5 其他压测数据
还在4核机器,ecs.g6.xlarge上,测试其他内容。
试一下关闭双1:
./mysql -h 172.20.3.69 -u root -pmysql123 -e "SET GLOBAL INNODB_FLUSH_LOG_AT_TRX_COMMIT = 2;"
./mysql -h 172.20.3.69 -u root -pmysql123 -e "SET GLOBAL SYNC_BINLOG = 1000;"
./mysql -h 172.20.3.69 -u root -pmysql123 -e "SET GLOBAL INNODB_FLUSH_LOG_AT_TRX_COMMIT = 2;"
./mysql -h 172.20.3.69 -u root -pmysql123 -e "SET GLOBAL SYNC_BINLOG = 1000;"
./mysql -h 172.20.3.69 -u root -pmysql123 -e "SET GLOBAL INNODB_FLUSH_LOG_AT_TRX_COMMIT = 2;"
./mysql -h 172.20.3.69 -u root -pmysql123 -e "SET GLOBAL SYNC_BINLOG = 1000;"
结果小幅提升:
[ 5s ] thds: 32 tps: 1971.76 qps: 39511.50 (r/w/o: 27671.77/7890.03/3949.71) lat (ms,95%): 32.53 err/s: 0.00 reconn/s: 0.00
[ 10s ] thds: 32 tps: 1933.70 qps: 38664.51 (r/w/o: 27063.54/7733.58/3867.39) lat (ms,95%): 34.33 err/s: 0.00 reconn/s: 0.00
[ 15s ] thds: 32 tps: 1920.60 qps: 38410.12 (r/w/o: 26886.55/7682.38/3841.19) lat (ms,95%): 34.33 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 32 tps: 1920.42 qps: 38416.95 (r/w/o: 26892.25/7683.87/3840.84) lat (ms,95%): 33.72 err/s: 0.00 reconn/s: 0.00
transactions: 38768 (1936.66 per sec.)
queries: 775360 (38733.11 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
total number of events: 38768
events (avg/stddev): 1211.5000/46.63
execution time (avg/stddev): 20.0054/0.00
[ 5s ] thds: 32 tps: 1971.76 qps: 39511.50 (r/w/o: 27671.77/7890.03/3949.71) lat (ms,95%): 32.53 err/s: 0.00 reconn/s: 0.00
[ 10s ] thds: 32 tps: 1933.70 qps: 38664.51 (r/w/o: 27063.54/7733.58/3867.39) lat (ms,95%): 34.33 err/s: 0.00 reconn/s: 0.00
[ 15s ] thds: 32 tps: 1920.60 qps: 38410.12 (r/w/o: 26886.55/7682.38/3841.19) lat (ms,95%): 34.33 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 32 tps: 1920.42 qps: 38416.95 (r/w/o: 26892.25/7683.87/3840.84) lat (ms,95%): 33.72 err/s: 0.00 reconn/s: 0.00
SQL statistics:
queries performed:
read: 542752
write: 155072
other: 77536
total: 775360
transactions: 38768 (1936.66 per sec.)
queries: 775360 (38733.11 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0167s
total number of events: 38768
Latency (ms):
min: 3.25
avg: 16.51
max: 95.71
95th percentile: 33.72
sum: 640174.39
Threads fairness:
events (avg/stddev): 1211.5000/46.63
execution time (avg/stddev): 20.0054/0.00
[ 5s ] thds: 32 tps: 1971.76 qps: 39511.50 (r/w/o: 27671.77/7890.03/3949.71) lat (ms,95%): 32.53 err/s: 0.00 reconn/s: 0.00
[ 10s ] thds: 32 tps: 1933.70 qps: 38664.51 (r/w/o: 27063.54/7733.58/3867.39) lat (ms,95%): 34.33 err/s: 0.00 reconn/s: 0.00
[ 15s ] thds: 32 tps: 1920.60 qps: 38410.12 (r/w/o: 26886.55/7682.38/3841.19) lat (ms,95%): 34.33 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 32 tps: 1920.42 qps: 38416.95 (r/w/o: 26892.25/7683.87/3840.84) lat (ms,95%): 33.72 err/s: 0.00 reconn/s: 0.00
SQL statistics:
queries performed:
read: 542752
write: 155072
other: 77536
total: 775360
transactions: 38768 (1936.66 per sec.)
queries: 775360 (38733.11 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0167s
total number of events: 38768
Latency (ms):
min: 3.25
avg: 16.51
max: 95.71
95th percentile: 33.72
sum: 640174.39
Threads fairness:
events (avg/stddev): 1211.5000/46.63
execution time (avg/stddev): 20.0054/0.00
提升这么小,且关闭双1会带来数据丢失风险,线上还是不要开了吧。
换MySQL 8,结果大跌眼镜,性能下降30%:
transactions: 23979 (1197.61 per sec.)
queries: 479580 (23952.21 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
total number of events: 23979
events (avg/stddev): 749.3438/24.03
execution time (avg/stddev): 20.0111/0.01
SQL statistics:
queries performed:
read: 335706
write: 95916
other: 47958
total: 479580
transactions: 23979 (1197.61 per sec.)
queries: 479580 (23952.21 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0210s
total number of events: 23979
Latency (ms):
min: 7.87
avg: 26.70
max: 170.96
95th percentile: 46.63
sum: 640354.71
Threads fairness:
events (avg/stddev): 749.3438/24.03
execution time (avg/stddev): 20.0111/0.01
SQL statistics:
queries performed:
read: 335706
write: 95916
other: 47958
total: 479580
transactions: 23979 (1197.61 per sec.)
queries: 479580 (23952.21 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0210s
total number of events: 23979
Latency (ms):
min: 7.87
avg: 26.70
max: 170.96
95th percentile: 46.63
sum: 640354.71
Threads fairness:
events (avg/stddev): 749.3438/24.03
execution time (avg/stddev): 20.0111/0.01
可能是一些性能调优参数没有做好,也可能是8就是比5慢...这里没有继续深入分析,总之后续继续用MySQL 5.7。
换一块更好的磁盘,PL1级别,性能微提升,和关双1差不多:
transactions: 38291 (1912.84 per sec.)
queries: 765820 (38256.85 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
total number of events: 38291
events (avg/stddev): 1196.5938/82.32
execution time (avg/stddev): 20.0068/0.00
SQL statistics:
queries performed:
read: 536074
write: 153164
other: 76582
total: 765820
transactions: 38291 (1912.84 per sec.)
queries: 765820 (38256.85 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0165s
total number of events: 38291
Latency (ms):
min: 4.23
avg: 16.72
max: 97.98
95th percentile: 34.33
sum: 640218.23
Threads fairness:
events (avg/stddev): 1196.5938/82.32
execution time (avg/stddev): 20.0068/0.00
SQL statistics:
queries performed:
read: 536074
write: 153164
other: 76582
total: 765820
transactions: 38291 (1912.84 per sec.)
queries: 765820 (38256.85 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0165s
total number of events: 38291
Latency (ms):
min: 4.23
avg: 16.72
max: 97.98
95th percentile: 34.33
sum: 640218.23
Threads fairness:
events (avg/stddev): 1196.5938/82.32
execution time (avg/stddev): 20.0068/0.00
其实从监控可以看到,主要是CPU瓶颈了。
所以,砸钱,换更好的机器,8核16G,ecs.g6.2xlarge(压测线程64):
transactions: 68824 (3436.77 per sec.)
queries: 1376480 (68735.35 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
total number of events: 68824
events (avg/stddev): 1075.3750/20.80
execution time (avg/stddev): 20.0092/0.01
SQL statistics:
queries performed:
read: 963536
write: 275296
other: 137648
total: 1376480
transactions: 68824 (3436.77 per sec.)
queries: 1376480 (68735.35 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0245s
total number of events: 68824
Latency (ms):
min: 5.17
avg: 18.61
max: 105.28
95th percentile: 34.95
sum: 1280586.88
Threads fairness:
events (avg/stddev): 1075.3750/20.80
execution time (avg/stddev): 20.0092/0.01
SQL statistics:
queries performed:
read: 963536
write: 275296
other: 137648
total: 1376480
transactions: 68824 (3436.77 per sec.)
queries: 1376480 (68735.35 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0245s
total number of events: 68824
Latency (ms):
min: 5.17
avg: 18.61
max: 105.28
95th percentile: 34.95
sum: 1280586.88
Threads fairness:
events (avg/stddev): 1075.3750/20.80
execution time (avg/stddev): 20.0092/0.01
有提升,但不到核数的线性。
16核,ecs.g6.4xlarge(压测线程150):
transactions: 120592 (6012.37 per sec.)
queries: 2411840 (120247.40 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
total number of events: 120592
events (avg/stddev): 803.9467/20.72
execution time (avg/stddev): 20.0191/0.01
SQL statistics:
queries performed:
read: 1688288
write: 482368
other: 241184
total: 2411840
transactions: 120592 (6012.37 per sec.)
queries: 2411840 (120247.40 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0560s
total number of events: 120592
Latency (ms):
min: 4.50
avg: 24.90
max: 404.92
95th percentile: 44.98
sum: 3002857.58
Threads fairness:
events (avg/stddev): 803.9467/20.72
execution time (avg/stddev): 20.0191/0.01
SQL statistics:
queries performed:
read: 1688288
write: 482368
other: 241184
total: 2411840
transactions: 120592 (6012.37 per sec.)
queries: 2411840 (120247.40 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0560s
total number of events: 120592
Latency (ms):
min: 4.50
avg: 24.90
max: 404.92
95th percentile: 44.98
sum: 3002857.58
Threads fairness:
events (avg/stddev): 803.9467/20.72
execution time (avg/stddev): 20.0191/0.01
最后看下AMD的最新拳头产品EPYC米兰,16c ecs.g7a.4xlarge:
transactions: 111633 (5569.86 per sec.)
queries: 2232660 (111397.28 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
total number of events: 111633
events (avg/stddev): 581.4219/13.48
execution time (avg/stddev): 20.0255/0.01
SQL statistics:
queries performed:
read: 1562862
write: 446532
other: 223266
total: 2232660
transactions: 111633 (5569.86 per sec.)
queries: 2232660 (111397.28 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0419s
total number of events: 111633
Latency (ms):
min: 3.72
avg: 34.44
max: 406.50
95th percentile: 65.65
sum: 3844893.80
Threads fairness:
events (avg/stddev): 581.4219/13.48
execution time (avg/stddev): 20.0255/0.01
SQL statistics:
queries performed:
read: 1562862
write: 446532
other: 223266
total: 2232660
transactions: 111633 (5569.86 per sec.)
queries: 2232660 (111397.28 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 20.0419s
total number of events: 111633
Latency (ms):
min: 3.72
avg: 34.44
max: 406.50
95th percentile: 65.65
sum: 3844893.80
Threads fairness:
events (avg/stddev): 581.4219/13.48
execution time (avg/stddev): 20.0255/0.01
确实比同为8核的Xeon差一些,大概10%,不过(虚拟机标价)价格低20%,性(zhuan)价(qian)比(u)之王当之无愧。
最后是数据汇总:
Core |
Stress_Threads |
QPS |
TPS |
Model |
Memo |
4 |
32 |
36162 |
1804 |
ecs.g6.xlarge |
5.7 |
4 |
32 |
38733 |
1936 |
ecs.g6.xlarge |
5.7 + 关双1 |
4 |
32 |
38526 |
1912 |
ecs.g6.xlarge |
5.7 + 换PL1磁盘 |
4 |
32 |
23952 |
1197 |
ecs.g6.xlarge |
8 |
8 |
64 |
68735 |
3436 |
ecs.g6.2xlarge |
5.7 |
16 |
150 |
120247 |
6012 |
ecs.g6.4xlarge |
5.7 |
16 |
150 |
111397 |
5569 |
ecs.g7a.4xlarge |
5.7 + amd机器 |
图汇总:

6 RR和RC
修改隔离级别RR / RC模式,基本无性能差异。