背景信息

TPC-H是业界常用的一套Benchmark,由TPC委员会制定发布,用于评测数据库的分析型查询能力。TPC-H查询包含8张数据表、22条复杂的SQL查询,大多数查询包含若干表Join、子查询和Group-by聚合等。 说明:本文中TPC-H的实现基于TPC-H的基准测试,并不能与已发布的TPC-H基准测试结果相比较,本文中的测试并不符合TPC-H基准测试的所有要求。

Benchmark Boot 是为 PolarDB-X 开发的一站式压测平台,目前支持的基准测试包括 Sysbench、TPC-C、TPC-H,通过图形化的方式提升测试效率。

测试设计

  • 测试数据量测试基于100 GB数据量(Scalar Factor=100),其中主要表数据量如下:
    • LINEITEM表约6亿行
    • ORDERS表1.5亿行
    • PART_SUPP表8000万行

主机资源

组件名称 机型 说明
OPS机器 ecs.g7.4xlarge 安装部署
计算节点 (CN)
日志节点(CDC)
列存节点(Columnar)
存储节点 (DN)
元数据节点(GMS)
ecs.i4.8xlarge * 3 32c256g + 7TB的存储
单价:7372元/月

PolarDB-X实例所有节点进行混部,可以提升资源利用的利用率

压力机

组件名称 机型 说明
压力机 ecs.hfg7.6xlarge 24c96g

测试方法

步骤1:准备压力机

部署Benchmark-Boot,参考文档:使用Benchmark Boot进行压测

# 下载镜像
docker pull polardbx/benchmark-boot:latest

# 启动容器
docker run -itd --name 'benchmark-boot' --privileged --net=host \
    -v /etc/localtime:/etc/localtime polardbx/benchmark-boot:latest \
    /usr/sbin/init

# 验证
curl http://127.0.0.1:4121/

如果采用离线部署方式,可以采用ops机器下载benchmark-boot镜像后上传到私有仓库

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

  1. 创建 PolarDB-X 实例,详细操作步骤请参见:通过PXD部署

实例创建参数:

version: v1
type: polardbx
cluster:
  name: pxc-columnar-test
  no_logger: false
  gms:
    image: polardbx/polardbx-engine:v2.4.0_8.4.19
    engine: galaxy
    engine_version: "8.0"
    host_group: [10.0.3.244, 10.0.3.245, 10.0.3.246]
    resources:
      mem_limit: 16G
  cn:
    image: polardbx/polardbx-sql:v2.4.0_5.4.19
    replica: 3
    nodes:
      - host: 10.0.3.244
      - host: 10.0.3.245
      - host: 10.0.3.246
    resources:
      mem_limit: 32G
      cpu_limit: 32
  dn:
    image: polardbx/polardbx-engine:v2.4.0_8.4.19
    engine: galaxy
    engine_version: "8.0"
    replica: 3
    nodes:
      - host_group: [10.0.3.244,10.0.3.245,10.0.3.246]
      - host_group: [10.0.3.245,10.0.3.246,10.0.3.244]
      - host_group: [10.0.3.246,10.0.3.244,10.0.3.245]
    resources:
      mem_limit: 40G
  cdc:
    image: polardbx/polardbx-cdc:v2.4.0_5.4.19
    replica: 2
    nodes:
      - host: 10.0.3.244
      - host: 10.0.3.245
    resources:
      mem_limit: 32G
      cpu_limit: 4
  columnar:
    image: polardbx/polardbx-columnar:v2.4.0_5.4.19
    replica: 2
    nodes:
      - host: 10.0.3.244
      - host: 10.0.3.245
    resources:
      mem_limit: 64G
      cpu_limit: 16
  1. 验证实例可连接,打开Benchmark-Boot,选择左侧运行压测->数据库连接,将数据库链接信息填入Benchmark-Boot,点击“提交”

注意:PolarDB-X提供了多个CN节点,生产环境推荐使用负载均衡设备进行访问,POC测试场景可以使用benchmark-boot自带的loadbalance机制。 配置例子: 主机ip填入多个地址,比如:192.168.1.102:3306,192.168.1.103:3306,192.168.1.104:3306,对应的端口填入-1 benchmark_connect

步骤3:压测数据准备

  1. 建库

打开Benchmark-Boot, 选择左侧运行压测->TPC-H->切换库,填入库名tpch100g,选择AUTO模式,提交

benchmark_tpch_auto

  1. 导入数据

建库完成后,下拉页面到底端,导入TPC-H数据,,并发可以填写96,等待数据准备完成 benchmark_tpch_load

列存索引

配置Columnar组件

列存节点(Columnar)架构采用计算存储分离,依赖特定的共享存储,支持阿里云 OSS 和 NFS 文件系统作为列存索引的存储。 对应的元数据配置,可以参考文档:配置列存组件

登录 PolarDB-X,修改如下SQL中的需要修改 file_uri,access_key_id 与 access_key_secret 字段,然后执行创建 OSS 的配置:

create filestorage oss with ('file_uri' = 'oss://****/', 'endpoint'='oss-cn-hangzhou.aliyuncs.com', 'access_key_id'='****', 'access_key_secret'='*****');

创建列存索引

通过前面benchmark-boot的TPC-H构造数据,导入的是行存表的数据,基于行存表进一步构建列存索引

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;

说明

  1. 可以执行 show columnar index 查看当前的列存索引状态,具体请参见 SHOW COLUMNAR INDEX
  2. 创建列存索引总耗时约为1小时左右

配置列存查询

通过Benchmark-Boot,左侧运行压测->数据库连接,设置调优参数,建议勾选所有的AP模式调优参数

benchmark_optimize_ap

通用AP优化,对应的等价参数(关闭日志和profile):

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;

PolarDB-X商业版本默认推荐在只读CN上开启列存查询,开源可以在主实例CN上通过配置项打开:

# 强制在CN主实例上开启HTAP能力,MPP+列存
set global ENABLE_HTAP = true;
set global ENABLE_MASTER_MPP = true;
set global ENABLE_COLUMNAR_OPTIMIZER = true;
set global ENABLE_NDV_USE_COLUMNAR = true;

触发统计信息采集

analyze table customer;
analyze table lineitem;
analyze table nation;
analyze table orders;
analyze table part;
analyze table partsupp;
analyze table region;
analyze table supplier;

运行TPC-H压测

选择左侧运行压测->TPC-H->运行TPC-H,选择所有查询 + 填入任务描述

benchmark_tpch_run

在 BenchmarkBoot 的“压测结果-TPCH”面板中,查看最终压测结果 说明 第一次运行 TPC-H 需要预热,建议运行多轮后,得到最终稳定的压测结果。

测试结果

时间(单位秒)
Q1 2.59
Q2 0.80
Q3 0.82
Q4 0.52
Q5 1.40
Q6 0.13
Q7 1.33
Q8 1.15
Q9 3.39
Q10 1.71
Q11 0.53
Q12 0.38
Q13 1.81
Q14 0.41
Q15 0.46
Q16 0.59
Q17 0.32
Q18 3.10
Q19 0.88
Q20 0.81
Q21 1.84
Q22 0.79
Total 25.76 秒

results matching ""

    No results matching ""