目标:通过对常规的mysql数据库性能测试,使学员快速了解到在X86架构和ARM架构的性能差异,以及熟练使用sysbench测试工具,分析比较不同架构的数据库性能差异.

架构图中部署3台主机,分别是:\
1台压测服务器(沿用压力测试机 Graviton_GameDay_Stress)
1台X86的mysql(沿用实验2的 x86 mysql服务器 Graviton_GameDay_MySQL1)
1台ARM架构的mysql(沿用实验2的 Graviton mysql服务器Graviton_Target-Mysql)
MySQL使用8.0.30版本
压测开始之前,统一两边的配置文件,分别在两台mysql(Graviton_GameDay_MySQL1和Graviton_Target-Mysql)机器执行以下命令:
sudo cat >> /etc/my.cnf << EOF
max_prepared_stmt_count = 9999999
innodb_buffer_pool_size=4096000000
skip-log-bin
innodb_flush_log_at_trx_commit=0
sync_binlog=0
default_authentication_plugin=mysql_native_password
EOF
在两台mysql服务器上,先创建好测试数据库配置文件,然后重启mysqld 进程让参数生效
mysql -h 127.0.0.1 -u root -pGravitonGameDay@2022
进入数据库命令窗口,输入以下命令创建数据库,
mysql> create database sbtest;
mysql> shutdown;
mysql> exit;
重新启动生效,并保持开机启动
sudo systemctl restart --now mysqld
sudo systemctl enable --now mysqld
登陆压测机器Graviton_GameDay_Stress,执行以下命令:
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench
正确的话会看到以下日志:
Running transaction
Installing : postgresql-libs-9.2.24-6.amzn2.x86_64 1/2
Installing : sysbench-1.0.20-1.el7.x86_64 2/2
Verifying : sysbench-1.0.20-1.el7.x86_64 1/2
Verifying : postgresql-libs-9.2.24-6.amzn2.x86_64 2/2
Installed:
sysbench.x86_64 0:1.0.20-1.el7
1)登陆压测机器Graviton_GameDay_Stress,先给x86 mysql(Graviton_GameDay_MySQL1)灌数据,修改以下命令中的IP,USER和PW 信息 为X86 机器对应信息并执行(约10分钟)
cat >> prepare.sh << EOF
#/bin/bash
echo "#### Start time is:###"
date
/usr/bin/sysbench --test=/usr/share/sysbench/select_random_points.lua --db-driver=mysql --mysql-host=${IP} --mysql-user=${USER} --mysql-password=${PW} --tables=5 --table-size=10000000 --db-driver=mysql --report-interval=10 --threads=4 --mysql-db=sbtest --rand-type=uniform prepare
echo "#### Finish time is:###"
date
EOF
后台执行命令
nohup bash prepare.sh &
查看执行日志
[ec2-user@ip-172-31-14-90 ~]$ tail -f nohup.out
Initializing worker threads...
Creating table 'sbtest1'...
Creating table 'sbtest2'...
Creating table 'sbtest3'...
Creating table 'sbtest4'...
Inserting 10000000 records into 'sbtest3'
Inserting 10000000 records into 'sbtest4'
Inserting 10000000 records into 'sbtest2'
Inserting 10000000 records into 'sbtest1'
2)重复步骤1),给ARM mysql(Graviton_Target-Mysql)灌数据,修改IP,USER和PW 信息 为ARM 机器对应信息并执行(约10分钟)
参考上面脚本
在压测机器Graviton_GameDay_Stress创建sysbench.sh 文件
vim sysbench.sh
#!/bin/bash
IP=$1
USER=$2
PW=$3
for thread in 2 4 6 8 ;do
echo "==== Start to run sysbench select_random_points.lua for $thread thread === "
date
/usr/bin/sysbench --test=/usr/share/sysbench/select_random_points.lua --table-size=10000000 --mysql-host=$IP --mysql-port=3306 --mysql-user=$USER --mysql-password=$PW --tables=5 --db-driver=mysql --report-interval=10 --threads=$thread --mysql-db=sbtest --time=120 run
echo "==== sysbench select_random_points.lua finished for $thread thread ==="
echo " ### Sleep 30 sec for next round #####"
sleep 30
done
在压测机Graviton_GameDay_Stress运行:
【1】先预热x86 的mysql()Graviton_GameDay_MySQL1
IP USER PW 换成 x86 机器的对应信息
/usr/bin/sysbench --test=/usr/share/sysbench/select_random_points.lua --mysql-host=$IP --mysql-port=3306 --mysql-user=$USER --mysql-password=$PW --tables=5 --db-driver=mysql --table-size=10000000 --report-interval=10 --threads=4 --mysql-db=sbtest --time=60 run
正确运行可以见到下图

【2】然后预热arm 的mysql(Graviton_Target-Mysql)
IP USER PW 换成 arm 机器的对应信息
/usr/bin/sysbench --test=/usr/share/sysbench/select_random_points.lua --mysql-host=$IP --mysql-port=3306 --mysql-user=$USER --mysql-password=$PW --tables=5 --db-driver=mysql --table-size=10000000 --report-interval=10 --threads=4 --mysql-db=sbtest --time=60 run
请下载压测excel模版文档,同时对与压测结果进行记录和比较
【1】先压测x86 的mysql(Graviton_GameDay_MySQL1)
IP USER PW 换成 x86 机器的对应信息 IP地址就是X86 Mysql的内网IP地址,账号就是graviton,密码就是GravitonGameDay@2022
nohup bash sysbench.sh <IP 10.0.xx.xx> <your-mysql-user> <your-mysql-password> >result_x86.log&
查看运行时日志
tail -f result_x86.log
查看QPS最终结果,并登记excel
grep 'queries:' result_x86.log
结果如下图:

查看latency最终结果,并登记excel
grep '95th' result_x86.log
【2】然后压测arm 的mysql(Graviton_Target-Mysql)
IP USER PW 换成 arm 机器的对应信息
nohup bash sysbench.sh <IP 10.0.xx.xx> <your-mysql-user> <your-mysql-password> >result_arm.log&
查看运行时日志
tail -f result_arm.log
查看QPS最终结果,并登记excel
grep 'queries:' result_arm.log
查看latency最终结果,并登记excel
grep '95th' result_arm.log
