背景信息
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 实例
- 创建 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
- 验证实例可连接,打开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
步骤3:压测数据准备
- 建库
打开Benchmark-Boot, 选择左侧运行压测->TPC-H->切换库,填入库名tpch100g,选择AUTO模式,提交
- 导入数据
建库完成后,下拉页面到底端,导入TPC-H数据,,并发可以填写96,等待数据准备完成
列存索引
配置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;
说明
- 可以执行 show columnar index 查看当前的列存索引状态,具体请参见 SHOW COLUMNAR INDEX
- 创建列存索引总耗时约为1小时左右
配置列存查询
通过Benchmark-Boot,左侧运行压测->数据库连接,设置调优参数,建议勾选所有的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,选择所有查询 + 填入任务描述
在 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 秒 |