MySQL 性能测试

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

MySQL On Graviton 性能测试

2.测试环境说明

架构图中部署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版本

3.压测环境部署

3.1 修改mysql 配置文件和准备测试数据库

压测开始之前,统一两边的配置文件,分别在两台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

3.2 安装sysbench 压测工具

登陆压测机器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 

3.3 准备压测数据

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分钟)

参考上面脚本

3.4 准备压测脚本

在压测机器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

3.5 对DB 进行预热

在压测机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

3.6 正式进行压测

下载压测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