本文详细介绍了PolarDB-X的Sysbench测试设计、测试过程和测试结果。
背景信息
Sysbench是一款开源的、模块化的、跨平台的多线程性能测试工具,可以执行数据库在CPU、内存、线程、IO等方面的性能测试。本文将验证PolarDB-X在Sysbench多种场景中的性能表现。
测试方法
- 准备压力机ECS
需准备一个ECS(建议配置为32 vCPU 128 GB内存,避免在测试高规格集群时,压力机成为瓶颈),后续操作步骤中涉及的数据准备、运行压测等使用的都是这台ECS机器。
说明 请将测试所用ECS部署在VPC网络内。请记住该VPC的名称和ID,后续的所有实例都将部署在该VPC内。
- 准备压测所用PolarDB-X实例
- 创建PolarDB-X实例,详细操作步骤请参见创建实例。
- 在实例中创建一个待压测的数据库(本测试中数据库名为sbtest),详细操作步骤请参见创建数据库。
CREATE DATABASE sbtest MODE = 'auto';
- 调整实例参数
说明 为了在压测场景下达到最佳性能,需要调整部分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_BACKGROUND_STATISTIC_COLLECTION=false;
set global ENABLE_STATISTIC_FEEDBACK=false;
set global ENABLE_DEADLOCK_DETECTION=false;
set global ENABLE_TRANS_LOG=false;
set global GROUP_PARALLELISM=1;
set global CONN_POOL_MAX_POOL_SIZE=500;
set global ENABLE_STATEMENTS_SUMMARY=false;
set global ENABLE_AUTO_SAVEPOINT=false;
set global INNODB_ADAPTIVE_HASH_INDEX=off;
set global TABLE_OPEN_CACHE = 20000;
set global SHARE_READ_VIEW = false;
set global CONN_POOL_XPROTO_XPLAN = true;
set global NEW_SEQ_GROUPING_TIMEOUT=30000;
- 准备压测数据
- 下载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