本文详细介绍了PolarDB-X(引擎版本MySQL 5.7和MySQL 8.0)的Sysbench测试设计、测试过程和测试结果。
背景信息
Sysbench是一款开源的、模块化的、跨平台的多线程性能测试工具,可以执行数据库在CPU、内存、线程、IO等方面的性能测试。本文将验证PolarDB-X在Sysbench多种场景中的性能表现。
测试设计
测试数据量
Sysbench数据包含16张表,每张表1千万的数据量。
测试所用实例规格
节点规格
节点数
4C32G
2
4C32G
4
8C64G
2
8C64G
4
测试所用压力机规格
ecs.g7ne.8xlarge(32 vCPU,128 GB内存)
测试方法
准备压力机ECS
需准备一个ECS(建议配置为32 vCPU 128 GB内存,避免在测试高规格集群时,压力机成为瓶颈),后续操作步骤中涉及的数据准备、运行压测等使用的都是这台ECS机器。
说明请将测试所用ECS部署在VPC网络内。请记住该VPC的名称和ID,后续的所有实例都将部署在该VPC内。
准备压测所用PolarDB-X实例
调整实例参数
说明为了在压测场景下达到最佳性能,需要调整部分PolarDB-X计算层实例参数。
修改参数ENABLE_COROUTINE的值为true,XPROTO_MAX_DN_CONCURRENT和XPROTO_MAX_DN_WAIT_CONNECTION的值为4000,详细操作步骤请参见参数设置。
通过命令行连接到PolarDB-X实例,在同一会话内执行如下SQL语句,关闭日志记录与CPU采样统计:
set global RECORD_SQL=false; set global MPP_METRIC_LEVEL=0; set global ENABLE_CPU_PROFILE=false; set global ENABLE_TRANS_LOG=false;
准备压测数据
下载Sysbench压测工具包sysbench.tar.gz,并解压。
tar xzvf sysbench.tar.gz cd sysbench/安装编译所需依赖库:
yum -y install make automake libtool pkgconfig libaio-devel mysql-devel ./autogen.sh ./configure make -j make install执行命令
sysbench --version,返回sysbench 1.1.0证明压测工具包安装成功。也可以通过GitHub下载开源版本的Sysbench,请参见GitHub下载链接。
准备压测配置
创建配置文件sysb.conf,将PolarDB-X连接信息填入配置文件,其中配置文件以及主要参数的解读如下:
mysql-host='{HOST}' mysql-port='{PORT}' mysql-user='{USER}' mysql-password='{PASSWORD}' mysql-db='sbtest' db-driver='mysql' percentile='95' histogram='on' report-interval='1' time='60' rand-type='uniform'参数说明:
percentile:响应时间采样的百分位;
histogram:是否展示响应时间分布直方图;
report-interval:显示实时结果的时间间隔,单位为秒;
time:压测时长,单位为秒;
rand-type:随机数的分布模式。
导入压测数据
sysbench --config-file='sysb.conf' --create-table-options='single locality="balance_single_table=on"' --tables='16' --table-size='10000000' --threads='16' --auto_inc='off' oltp_point_select prepare参数说明:
config-file:指定通用配置文件;
create-table-options:指定建表模式;
tables:表的数量;
table-size:单张表的数据量;
threads:导入时的并发数;
auto_inc:是否使用auto_increment。
执行压测
以下列举了Sysbench 6种不同场景测试的命令,建议首次压测增加压测时长。
说明命令涉及的相关参数说明如下:
db-ps-mode:是否开启prepare模式;
mysql-ignore-errors:忽略如锁冲突等原因产生的MySQL错误代码;
range-size:指定range查询的范围大小。
点查:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={并发数} oltp_point_select run只读:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --range-size=5 --threads={并发数} oltp_read_only run读写:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --range-size=5 --threads={并发数} oltp_read_write run按索引更新:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={并发数} oltp_update_index run非索引更新:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={并发数} oltp_update_non_index run写入:
sysbench --config-file='sysb.conf' --db-ps-mode='disable' --mysql-ignore-errors='all' --tables='16' --table-size='10000000' --threads={并发数} oltp_write_only run
测试结果
引擎版本MySQL 5.7
版本号:polardb-2.4.0_5.4.19-20240610_xcluster5.4.19-20240527,详情请参见:版本发布说明。
以下结果均以QPS作为衡量性能的标准。
点查场景结果 (point_select)

规格  | 并发  | QPS  | 
4C32G*2  | 1000  | 194921.53  | 
4C32G*4  | 1000  | 355299.81  | 
8C64G*2  | 1000  | 304538.44  | 
8C64G*4  | 2000  | 618634.19  | 
只读场景结果 (read_only)

规格  | 并发  | QPS  | 
4C32G*2  | 600  | 191075.61  | 
4C32G*4  | 1000  | 308160.47  | 
8C64G*2  | 1000  | 308352.62  | 
8C64G*4  | 2000  | 598847.81  | 
读写场景结果 (read_write)

规格  | 并发  | QPS  | 
4C32G*2  | 600  | 102279.28  | 
4C32G*4  | 600  | 161648.89  | 
8C64G*2  | 600  | 142095.41  | 
8C64G*4  | 600  | 243955.73  | 
按索引更新场景结果 (update_index)

规格  | 并发  | QPS  | 
4C32G*2  | 600  | 50092.01  | 
4C32G*4  | 600  | 89559.24  | 
8C64G*2  | 600  | 65857.4  | 
8C64G*4  | 1000  | 130311.38  | 
非索引更新场景结果 (update_non_index)

规格  | 并发  | QPS  | 
4C32G*2  | 400  | 50393.43  | 
4C32G*4  | 1000  | 92495.24  | 
8C64G*2  | 1000  | 69030.37  | 
8C64G*4  | 1000  | 138283.81  | 
写入场景结果 (write_only)

规格  | 并发  | QPS  | 
4C32G*2  | 400  | 52322.07  | 
4C32G*4  | 600  | 81170.89  | 
8C64G*2  | 600  | 69120.16  | 
8C64G*4  | 600  | 114337.76  | 
引擎版本MySQL 8.0
版本号:polardb-2.4.0_5.4.19-20240610_xcluster8.4.19-20240523,详情请参见:版本发布说明。
以下结果均以QPS作为衡量性能的标准。
点查场景结果 (point_select)

规格  | 并发  | QPS  | 
4C32G*2  | 1000  | 165611.83  | 
4C32G*4  | 1000  | 309981.94  | 
8C64G*2  | 1000  | 345505.5  | 
8C64G*4  | 2000  | 618638.91  | 
只读场景结果 (read_only)

规格  | 并发  | QPS  | 
4C32G*2  | 600  | 167945.12  | 
4C32G*4  | 1000  | 296882.66  | 
8C64G*2  | 1000  | 301085.34  | 
8C64G*4  | 2000  | 534553.26  | 
读写场景结果 (read_write)

规格  | 并发  | QPS  | 
4C32G*2  | 600  | 78310  | 
4C32G*4  | 600  | 113646.43  | 
8C64G*2  | 600  | 119788.57  | 
8C64G*4  | 600  | 179227.38  | 
按索引更新场景结果 (update_index)

规格  | 并发  | QPS  | 
4C32G*2  | 600  | 38220.55  | 
4C32G*4  | 600  | 63354.87  | 
8C64G*2  | 600  | 55573.63  | 
8C64G*4  | 1000  | 90181.68  | 
非索引更新场景结果 (update_non_index)

规格  | 并发  | QPS  | 
4C32G*2  | 400  | 37439.38  | 
4C32G*4  | 1000  | 66362.21  | 
8C64G*2  | 1000  | 63527.22  | 
8C64G*4  | 1000  | 92856.59  | 
写入场景结果 (write_only)

规格  | 并发  | QPS  | 
4C32G*2  | 400  | 37884.63  | 
4C32G*4  | 600  | 52481.99  | 
8C64G*2  | 600  | 58711.55  | 
8C64G*4  | 600  | 74967.45  |