本文为您介绍如何在Hologres中进行TPC-H性能测试。
背景信息
TPC-H简介
TPC-H是一个决策支持基准,由一套面向业务的临时查询和并发数据修改组成。选择的查询和填充数据库的数据具有广泛的行业相关性。该基准测试说明了决策支持系统可以检查大量数据,执行高度复杂的查询,并解答关键的业务问题。
以上描述引用自TPC Benchmark H (TPC-H),TPC-H详情请参见TPCH Specification。
本文的TPC-H的实现基于TPC-H的基准测试,并不能与已发布的TPC-H基准测试结果相比较,本文中的测试并不符合TPC-H基准测试的所有要求。
数据集简介
TPC-H是由国际事务处理性能委员会(Transaction Processing Performance Council)制定的用来模拟决策支持类应用的一个测试集。目前在学术界和工业界普遍采用它来评价决策支持技术方面应用的性能。
TPC-H是根据真实的生产运行环境来建模,模拟了一套销售系统的数据仓库。其共包含8张表,数据量可设定从1 GB~3 TB不等。其基准测试共包含了22个查询,主要评价指标各个查询的响应时间,即从提交查询到结果返回所需时间。测试结果可以综合反映系统处理查询时的能力,详情请参见TPC-H基准。
注意事项
为减少可能对测试结果有影响的变量,建议您每次使用新创建的Hologres实例进行测试,不要使用原有或者经过升降配后的实例。
操作步骤
本测试场景直接使用TPC-H中的22条查询语句进行测试。测试数据量会直接影响测试结果,TPC-H的生成工具中使用SF(scale factor)控制生成数据量的大小,1 SF对应1 GB。
准备工作。
您需要准备OLAP查询场景所需的基础环境。
创建Hologres实例,详情请参见购买Hologres。
本文测试TPC-H 1 TB的数据集,所以计算资源选择
96核384GB
。您可以根据实际业务需求,选择计算资源规格。创建ECS实例,详情请参见实例创建方式介绍。
本文使用的ECS实例规格如下:
实例规格:
ecs.g6e.4xlarge
。操作系统:
Alibaba Cloud Linux 3.2104 LTS 64位
。数据盘:磁盘类型为ESSD云盘,具体数据容量根据需要测试的数据量大小决定。
数据集的数据量仅针对原始数据的数据量,不包括索引等空间占用,因此在准备环境时,您需要预留更多的空间。
配置工具包参数。
登录ECS实例,详情请参见连接方式概述。
在ECS中执行以下命令,安装psql客户端。
yum update -y yum install postgresql-server -y yum install postgresql-contrib -y
在ECS中执行以下命令,下载Hologres Benchmark测试工具包并解压。
wget https://oss-tpch.oss-cn-hangzhou.aliyuncs.com/hologres_benchmark_for_tpch.tar tar xvf hologres_benchmark_for_tpch.tar
在ECS中执行以下命令,进入Hologres Benckmark目录。
cd hologres_benchmark_for_tpch/benchmark
进行性能测试。
性能测试流程说明。
性能测试主要流程如下:
在Hologres中创建名称为
hologres_tpch
的数据库。生成数据。
创建表并导入数据。
执行22条SQL查询。
命令说明。
在ECS中执行以下命令,进行全流程自动化TPC-H测试。
python tpch_1t_dbgen.py --psql "PGUSER=<access_key_id> PGPASSWORD=<access_key_secret> psql -p 80 -h <vpc_endpoint>" --init_and_run --scale_factor <scale_factor>
考虑到可能执行时间很长,推荐使用后台运行模式,样例如下:
nohup python tpch_1t_dbgen.py --psql "PGUSER=<access_key_id> PGPASSWORD=<access_key_secret> psql -p 80 -h <vpc_endpoint>" --init_and_run --scale_factor 1000 &
参数说明。
参数
说明
access_key_id
当前阿里云账号的AccessKey ID。获取方式请参见准备阿里云账号。
access_key_secret
当前阿里云账号的AccessKey Secret。获取方式请参见准备阿里云账号。
vpc_endpoint
Hologres实例的指定VPC网络地址。
您可以进入Hologres管理控制台的实例详情页,从网络信息区域获取网络地址。
scale_factor
数据集的比例因子,控制生成数据量的大小,单位为GB。
本文测试 1 TB的数据量,因此值设置为
1000
。
测试结果
性能测试成功后,测试结果会保存在hologres_benchmark_for_tpch/tpch_test_log
目录中,您可以切换到该路径下查看相关的查询语句、执行计划、执行时间等详细信息,目录结构如下所示:
./
|-- analyze.sql.result
|-- benchmark_result # 最近一次TPC-H SQL 的执行计划和结果
| |-- query10.sql.result
| |-- query10.sql.resultdata
| |-- query11.sql.result
| |-- query11.sql.resultdata
| |-- query12.sql.result
| |-- query12.sql.resultdata
| |-- query13.sql.result
| |-- query13.sql.resultdata
| |-- query14.sql.result
| |-- query14.sql.resultdata
| |-- query15.sql.result
| |-- query15.sql.resultdata
| |-- query16.sql.result
| |-- query16.sql.resultdata
| |-- query17.sql.result
| |-- query17.sql.resultdata
| |-- query18.sql.result
| |-- query18.sql.resultdata
| |-- query19.sql.result
| |-- query19.sql.resultdata
| |-- query1.sql.result
| |-- query1.sql.resultdata
| |-- query20.sql.result
| |-- query20.sql.resultdata
| |-- query21.sql.result
| |-- query21.sql.resultdata
| |-- query22.sql.result
| |-- query22.sql.resultdata
| |-- query2.sql.result
| |-- query2.sql.resultdata
| |-- query3.sql.result
| |-- query3.sql.resultdata
| |-- query4.sql.result
| |-- query4.sql.resultdata
| |-- query5.sql.result
| |-- query5.sql.resultdata
| |-- query6.sql.result
| |-- query6.sql.resultdata
| |-- query7.sql.result
| |-- query7.sql.resultdata
| |-- query8.sql.result
| |-- query8.sql.resultdata
| |-- query9.sql.result
| `-- query9.sql.resultdata
|-- copy_dbgen.sql.result
|-- init_holo.sql.result
|-- init.sql.result
|-- online_config.result
|-- reset_config.result
|-- tmp # TPC-H涉及的22条SQL Query。
| |-- query10.sql
| |-- query11.sql
| |-- query12.sql
| |-- query13.sql
| |-- query14.sql
| |-- query15.sql
| |-- query17.sql
| |-- query18.sql
| |-- query19.sql
| |-- query1.sql
| |-- query21.sql
| |-- query22.sql
| |-- query2.sql
| |-- query3.sql
| |-- query4.sql
| |-- query5.sql
| |-- query6.sql
| |-- query7.sql
| |-- query8.sql
| `-- query9.sql
|-- tmp_normalize_file.sql
`-- total.result # TPC-H涉及的22条SQL的执行时间总结