本文详细介绍了PolarDB-X的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内存)

测试方法

  1. 准备压力机ECS

    需准备一个ECS(建议配置为32 vCPU 128 GB内存,避免在测试高规格集群时,压力机成为瓶颈),后续操作步骤中涉及的数据准备、运行压测等使用的都是这台ECS机器。

    说明 请将测试所用ECS部署在VPC网络内。请记住该VPC的名称和ID,后续的所有实例都将部署在该VPC内。
  2. 准备压测所用PolarDB-X实例
    1. 创建PolarDB-X实例,详细操作步骤请参见创建实例
      说明 需保证 PolarDB-X实例和压力机ECS在同一个VPC中。
    2. 在实例中创建一个待压测的数据库(本测试中数据库名为sbtest),详细操作步骤请参见CREATE DATABASE
      CREATE DATABASE sbtest;
  3. 调整实例参数
    说明 为了在压测场景下达到最佳性能,需要调整部分 PolarDB-X计算层实例参数。
    1. 修改参数ENABLE_COROUTINE的值为true,XPROTO_MAX_DN_CONCURRENTXPROTO_MAX_DN_WAIT_CONNECTION的值为4000,详细操作步骤请参见参数设置
    2. 通过命令行连接到PolarDB-X实例,在同一会话内执行如下SQL语句,关闭日志记录与CPU采样统计:
      set global RECORD_SQL = false;
      set global MPP_METRIC_LEVEL = 0;
      set global ENABLE_CPU_PROFILE = false;
      set global GROUP_PARALLELISM = 1;
      set global SHARE_READ_VIEW = false;
      set global CONN_POOL_XPROTO_XPLAN = false;
      set global NEW_SEQ_GROUPING_TIMEOUT=30000;
  4. 准备压测数据
    1. 下载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下载链接

    2. 准备压测配置

      创建配置文件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:随机数的分布模式。
    3. 导入压测数据
      sysbench --config-file='sysb.conf' --create-table-options='dbpartition by hash(id)'  --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。
  5. 执行压测

    以下列举了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

测试结果

5.4.15-16704996

以下结果均以QPS作为衡量性能的标准。

点查场景结果(point_select) 456789
实例规格 并发数 QPS
4C32G * 2 600 68730.31
4C32G * 4 1000 108185.83
8C64G * 2 1000 109543.96
8C64G * 4 2000 239379.27
只读场景结果(read_only) 456789
实例规格 并发数 QPS
4C32G * 2 200 21543.57
4C32G * 4 200 42993.31
8C64G * 2 200 40491.6
8C64G * 4 1000 68371.93
读写场景结果(read_write) 456789
实例规格 并发数 QPS
4C32G * 2 100 19951.65
4C32G * 4 200 39865
8C64G * 2 300 33691.76
8C64G * 4 600 59057.34
按索引更新场景结果(update_index) 456789
实例规格 并发数 QPS
4C32G * 2 300 26375.3
4C32G * 4 300 58954.08
8C64G * 2 600 46302.07
8C64G * 4 1200 91682.63
非索引更新场景结果(update_non_index) 456789
实例规格 并发数 QPS
4C32G * 2 300 40881.75
4C32G * 4 300 69517.06
8C64G * 2 400 62295.98
8C64G * 4 800 119449.52
写入场景结果(write_only) 456789
实例规格 并发数 QPS
4C32G * 2 200 24713.17
4C32G * 4 200 50770.17
8C64G * 2 300 33691.76
8C64G * 4 400 78274.68

5.4.15-16715927

以下结果均以QPS作为衡量性能的标准。

点查场景结果(point_select) 456789
实例规格 并发数 QPS
4C32G * 2 600 66538.99
4C32G * 4 1000 107442.5
8C64G * 2 1000 106899.87
8C64G * 4 2000 232987.33
只读场景结果(read_only) 456789
实例规格 并发数 QPS
4C32G * 2 200 20603.53
4C32G * 4 200 41793.11
8C64G * 2 200 39230.49
8C64G * 4 1000 62565.53
读写场景结果(read_write) 456789
实例规格 并发数 QPS
4C32G * 2 100 19542.14
4C32G * 4 200 38770.4
8C64G * 2 300 32580.99
8C64G * 4 600 57012.26
按索引更新场景结果(update_index) 456789
实例规格 并发数 QPS
4C32G * 2 300 26616.58
4C32G * 4 300 58988.03
8C64G * 2 600 46609.12
8C64G * 4 1200 90121.97
非索引更新场景结果(update_non_index) 456789
实例规格 并发数 QPS
4C32G * 2 300 39274.29
4C32G * 4 300 70530.66
8C64G * 2 400 59854.12
8C64G * 4 800 108870.56
写入场景结果(write_only) 456789
实例规格 并发数 QPS
4C32G * 2 200 25169.84
4C32G * 4 200 50604.03
8C64G * 2 300 39833.61
8C64G * 4 400 74330.49

5.4.16-16717637

以下结果均以QPS作为衡量性能的标准。

点查场景结果(point_select) 456789
实例规格 并发数 QPS
4C32G * 2 600 65393.67
4C32G * 4 1000 104985.89
8C64G * 2 1000 111570.03
8C64G * 4 2000 224893.72
只读场景结果(read_only) 456789
实例规格 并发数 QPS
4C32G * 2 200 20673.73
4C32G * 4 200 39223.89
8C64G * 2 200 39345.95
8C64G * 4 1000 67839.18
读写场景结果(read_write) 456789
实例规格 并发数 QPS
4C32G * 2 100 19009.06
4C32G * 4 200 38012.96
8C64G * 2 300 32773.23
8C64G * 4 600 55909.46
按索引更新场景结果(update_index) 456789
实例规格 并发数 QPS
4C32G * 2 300 27109.96
4C32G * 4 300 58785.78
8C64G * 2 600 43185.52
8C64G * 4 1200 86903.73
非索引更新场景结果(update_non_index) 456789
实例规格 并发数 QPS
4C32G * 2 300 35660.22
4C32G * 4 300 77482.67
8C64G * 2 400 55106.26
8C64G * 4 800 108846.9
写入场景结果(write_only) 456789
实例规格 并发数 QPS
4C32G * 2 200 25127.79
4C32G * 4 200 49822.19
8C64G * 2 300 39219.46
8C64G * 4 400 79615.04