全部产品
Search
文档中心

云原生数据库 PolarDB:Sysbench测试

更新时间:Dec 29, 2023

本文详细介绍了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实例,详细操作步骤请参见创建实例

    2. 在实例中创建一个待压测的数据库(本测试中数据库名为sbtest),详细操作步骤请参见创建数据库

      CREATE DATABASE sbtest MODE = 'auto';
  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 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;
  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='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。

  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

65611.43

4C32G * 4

1000

122036.76

8C64G * 2

1000

112588.98

8C64G * 4

2000

242439.92

只读场景结果(read_only)456789

实例规格

并发数

QPS

4C32G * 2

200

72321.57

4C32G * 4

200

123499.89

8C64G * 2

200

112588.98

8C64G * 4

1000

235696.94

读写场景结果(read_write)456789

实例规格

并发数

QPS

4C32G * 2

100

45417.06

4C32G * 4

200

84128.1

8C64G * 2

300

80474.9

8C64G * 4

600

143958.78

按索引更新场景结果(update_index)456789

实例规格

并发数

QPS

4C32G * 2

300

31744.92

4C32G * 4

300

64425.82

8C64G * 2

600

48569.83

8C64G * 4

1200

92562.98

非索引更新场景结果(update_non_index)456789

实例规格

并发数

QPS

4C32G * 2

300

42117.02

4C32G * 4

300

54015.52

8C64G * 2

400

45966.4

8C64G * 4

800

113690.88

写入场景结果(write_only)456789

实例规格

并发数

QPS

4C32G * 2

200

34261.48

4C32G * 4

200

59498.09

8C64G * 2

300

52285.58

8C64G * 4

400

89546.16

5.4.15-16715927

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

点查场景结果(point_select)456789

实例规格

并发数

QPS

4C32G * 2

600

71399.03

4C32G * 4

1000

122491.05

8C64G * 2

1000

121634.04

8C64G * 4

2000

235068.85

只读场景结果(read_only)456789

实例规格

并发数

QPS

4C32G * 2

200

62859.64

4C32G * 4

200

117161.64

8C64G * 2

200

123697.56

8C64G * 4

1000

240998.7

读写场景结果(read_write)456789

实例规格

并发数

QPS

4C32G * 2

100

43023.64

4C32G * 4

200

84318.95

8C64G * 2

300

86702.66

8C64G * 4

600

143754.44

按索引更新场景结果(update_index)456789

实例规格

并发数

QPS

4C32G * 2

300

31837.19

4C32G * 4

300

64450.22

8C64G * 2

600

50669.57

8C64G * 4

1200

92942.66

非索引更新场景结果(update_non_index)456789

实例规格

并发数

QPS

4C32G * 2

300

31437.64

4C32G * 4

300

70815.01

8C64G * 2

400

52093.29

8C64G * 4

800

123643.37

写入场景结果(write_only)456789

实例规格

并发数

QPS

4C32G * 2

200

34026.33

4C32G * 4

200

58624.59

8C64G * 2

300

53741.5

8C64G * 4

400

86151.32

5.4.16-16717637

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

点查场景结果(point_select)456789

实例规格

并发数

QPS

4C32G * 2

600

74650.4

4C32G * 4

1000

106492.52

8C64G * 2

1000

127032.44

8C64G * 4

2000

217089.44

只读场景结果(read_only)456789

实例规格

并发数

QPS

4C32G * 2

200

69994.6

4C32G * 4

200

116932.02

8C64G * 2

200

112704.98

8C64G * 4

1000

238991.34

读写场景结果(read_write)456789

实例规格

并发数

QPS

4C32G * 2

100

44818.53

4C32G * 4

200

84642.45

8C64G * 2

300

81493.08

8C64G * 4

600

140726.78

按索引更新场景结果(update_index)456789

实例规格

并发数

QPS

4C32G * 2

300

31393.88

4C32G * 4

300

63485.13

8C64G * 2

600

47620.55

8C64G * 4

1200

92960.04

非索引更新场景结果(update_non_index)456789

实例规格

并发数

QPS

4C32G * 2

300

45550.3

4C32G * 4

300

54273.97

8C64G * 2

400

62637.64

8C64G * 4

800

121596.45

写入场景结果(write_only)456789

实例规格

并发数

QPS

4C32G * 2

200

33277.91

4C32G * 4

200

57892.17

8C64G * 2

300

51673.2

8C64G * 4

400

86455.57

5.4.17-16835173

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

点查场景结果(point_select)456789

规格

并发

QPS

4C32G*2

600

86033.36

4C32G*4

1000

166897.13

8C64G*2

1000

154769.16

8C64G*4

2000

305428.85

只读场景结果(read_only)456789

规格

并发

QPS

4C32G*2

200

94950.84

4C32G*4

200

157773.44

8C64G*2

200

162426.9

8C64G*4

1000

303120.64

读写场景结果(read_write)456789

规格

并发

QPS

4C32G*2

100

59371.01

4C32G*4

200

106015.85

8C64G*2

300

108037.57

8C64G*4

600

185936.25

按索引更新场景结果(update_index)456789

规格

并发

QPS

4C32G*2

300

32958.09

4C32G*4

300

62640.72

8C64G*2

600

52925.62

8C64G*4

1200

100219.02

非索引更新场景结果(update_non_index)456789

规格

并发

QPS

4C32G*2

300

44617.7

4C32G*4

300

91142.8

8C64G*2

400

78510.47

8C64G*4

800

143923.67

写入场景结果(write_only)456789

规格

并发

QPS

4C32G*2

200

36829.85

4C32G*4

200

60741.75

8C64G*2

300

63400.16

8C64G*4

400

100897.1

5.4.18-16977056

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

点查场景结果(point_select)DFDF.png

规格

并发

QPS

4C32G*2

600

86076.19

4C32G*4

1000

171788.14

8C64G*2

1000

153816.64

8C64G*4

2000

310194.34

只读场景结果(read_only)QWQW.png

规格

并发

QPS

4C32G*2

200

97286.57

4C32G*4

200

178936.19

8C64G*2

200

159390.63

8C64G*4

1000

307663.98

读写场景结果(read_write)ZXZX.png

规格

并发

QPS

4C32G*2

100

56500.61

4C32G*4

200

107762.36

8C64G*2

300

119275.8

8C64G*4

600

170881.36

按索引更新场景结果(update_index)ERER.png

规格

并发

QPS

4C32G*2

300

30654.23

4C32G*4

300

64730.37

8C64G*2

600

65536.57

8C64G*4

1200

95629.61

非索引更新场景结果(update_non_index)TYTY.png

规格

并发

QPS

4C32G*2

300

44992.24

4C32G*4

300

97440.82

8C64G*2

400

99340.7

8C64G*4

800

131181.64

写入场景结果(write_only)GHGH.png

规格

并发

QPS

4C32G*2

200

35168.48

4C32G*4

200

64152.25

8C64G*2

300

74929.45

8C64G*4

400

93430.79