列存索引TPC-H测试(1 TB)

背景信息

TPC-H是业界常用的一套Benchmark,由TPC委员会制定发布,用于评测数据库的分析型查询能力。TPC-H查询包含8张数据表、22条复杂的SQL查询,大多数查询包含若干表Join、子查询和Group-by聚合等。

说明

本文的TPC-H的实现基于TPC-H的基准测试,并不能与已发布的TPC-H基准测试结果相比较,本文中的测试并不符合TPC-H基准测试的所有要求。

测试设计

测试数据量

测试基于1 TB数据量(Scalar Factor=1000),其中主要表数据量如下:

  • LINEITEM约60亿行

  • ORDERS 15亿行

  • PART_SUPP 8亿行

测试所用实例规格

  • 节点规格:16c128g

  • 节点数:3/4/6

  • 数据集大小:1000 GB

测试所用压力机规格

ecs.g7.4xlarge(16 vCPU,64 GB内存)

测试方法

步骤1:准备压力机ECS

需准备一个ECS,后续操作步骤中涉及的数据导入、运行压测等使用的都是这台ECS机器。

说明
  • 请将测试所用的ECS部署在VPC网络内,并记住该VPC的名称和ID,后续的所有实例都将部署在该VPC内。

  • 建议ECS的操作系统为CentOS,并开放公网IP。

步骤2:准备压测所用PolarDB-X实例

创建PolarDB-X实例,具体步骤请参见创建实例

说明
  • 需保证实例和压力机ECS在同一个VPC中。

  • PolarDB-X实例的白名单添加压力机ECS的内网地址。

步骤3:调整实例参数

说明

为了在压测场景下达到最佳性能,需要调整PolarDB-X计算层实例参数。

  1. 修改参数XPROTO_MAX_DN_CONCURRENT的值为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;

步骤4:安装BenchmarkBoot压测工具

  1. 为压力机ECS安全组开放4121端口,具体步骤请参见添加安全组规则

  2. 登录压力机ECS,执行bash -c "$(curl -fsSL https://benchmark-boot.oss-cn-hangzhou.aliyuncs.com/setup.sh)"安装BenchmarkBoot压测工具,具体步骤请参见BenchmarkBoot下载安装

  3. 在浏览器上打开http://{压力机公网IP}:4121,出现BenchmarkBoot首页代表安装成功。

步骤5:数据准备

  1. 在BenchmarkBoot的运行压测 > 数据库连接 > 配置数据库连接界面中,配置PolarDB-X连接串(主机ip、端口、用户名、密码),输入TPC-H库名、建库模式选择AUTO,单击提交1701177480105-291f0406-8b6f-4a5e-a9dc-fad3a3c6e82e.png

  2. 在BenchmarkBoot的运行压测 > TPCH > 导入TPCH界面中,输入数据集规模(GB)为1000,物理分片数为16,单击提交,导入TPC-H 1000 GB数据到PolarDB-X主实例。

    1714284508293-d4b47545-4155-4e9d-a56a-62fa8bb8b150.png

    说明

    在数据导入完成后,BenchmarkBoot会自动执行analyze table收集统计信息。

  3. 确认上一步的TPC-H 1 TB数据集导入完成后,在PolarDB-X主实例上执行以下SQL创建列存索引,具体步骤请参见创建和使用CCI

    create clustered columnar index `nation_col_index` on nation(`n_nationkey`) partition by hash(`n_nationkey`) partitions 1;
    
    create clustered columnar index `region_col_index` on region(`r_regionkey`) partition by hash(`r_regionkey`) partitions 1;
    
    create clustered columnar index `customer_col_index` on customer(`c_custkey`) partition by hash(`c_custkey`) partitions 96;
    
    create clustered columnar index `part_col_index` on part(`p_size`) partition by hash(`p_partkey`) partitions 96;
    
    create clustered columnar index `partsupp_col_index` on partsupp(`ps_partkey`) partition by hash(`ps_partkey`) partitions 96;
    
    create clustered columnar index `supplier_col_index` on supplier(`s_suppkey`) partition by hash(`s_suppkey`) partitions 96;
    
    create clustered columnar index `orders_col_index` on orders(`o_orderdate`,`o_orderkey`) partition by hash(`o_orderkey`) partitions 96;
    
    create clustered columnar index `lineitem_col_index` on lineitem(`l_shipdate`,`l_orderkey`) partition by hash(`l_orderkey`) partitions 96;
    说明
    • 可以执行show columnar index查看当前的列存索引状态,具体步骤请参见SHOW COLUMNAR INDEX

    • 创建列存索引总耗时约为45分钟。

步骤6:添加列存只读实例

PolarDB-X主实例添加列存只读实例,具体步骤请参见添加列存只读实例

说明

PolarDB-X列存只读实例的白名单添加压力机ECS的内网地址。

步骤7:调整实例参数

说明

为在压测场景下达到最佳性能,需要调整PolarDB-X列存只读实例参数。

通过命令行连接到PolarDB-X列存只读实例,在同一会话内执行如下SQL语句,设置参数:

set global SCHEDULE_BY_PARTITION=true;

set global BLOCK_CACHE_MEMORY_SIZE_FACTOR=0.3;
set global OSS_FS_USE_BYTES_CACHE=true;
set global OSS_FS_MEMORY_RATIO_OF_BYTES_CACHE=0.3;
set global ONLY_CACHE_PRIMARY_KEY_IN_BLOCK_CACHE=true;

set global MPP_TASK_LOCAL_MAX_BUFFER_SIZE=8000000000;

set global GLOBAL_RF_ROWS_UPPER_BOUND=50000000;

步骤8:进行TPC-H测试

  1. 在BenchmarkBoot的运行压测 > 数据库连接 > 配置数据库连接界面中,配置列存只读实例连接串,输入TPC-H库名、建库模式选择自动判断,单击提交

  2. 在BenchmarkBoot的运行压测 > TPCH > 运行TPCH界面中,选择所有查询、填入任务描述,单击提交,运行TPC-H测试的22条查询语句。

    SDSD.png

  3. 在BenchmarkBoot的压测结果 > TPCH界面中,查看最终压测结果。

    说明

    第一次运行TPC-H需要预热,建议运行多轮后,得到最终稳定的压测结果。

测试结果

以下结果的时间单位为:秒(s)

查询

3*16C128 GB

4*16C128 GB

6*16C128 GB

Q1

28.15

24.81

14

Q2

11.55

9.02

5.12

Q3

20.98

16.54

8.73

Q4

16.26

14.59

7.06

Q5

28.25

21.28

14.01

Q6

7.76

6.84

1.95

Q7

25.81

17.83

11.14

Q8

23.97

21.38

10.37

Q9

71.63

57.86

36.24

Q10

35.98

27.91

16.85

Q11

6.61

4.65

2.54

Q12

8.46

7.1

3.37

Q13

33.15

23.87

16.8

Q14

9.32

8.1

3.31

Q15

7.44

6.2

3.11

Q16

10.18

6.07

4.08

Q17

18.2

11.97

7.46

Q18

47.26

38.65

20.15

Q19

24.86

21.81

13.48

Q20

11.16

8.59

5.35

Q21

50.24

44.85

22.76

Q22

11.54

8.53

6.05

总时间

508.76

408.45

233.93