TPC-H 基准测试
TPC-H 是美国交易处理效能委员会 TPC(Transaction Processing Performance Council)组织制定的用来模拟决策支持类应用的测试集。它包括一整套面向业务的 ad-hoc 查询和并发数据修改。
TPC-H 根据真实的生产运行环境来建模,模拟了一套销售系统的数据仓库。该测试共包含 8 张表,数据量可设定从 1 GB~3 TB不等。其基准测试共包含了 22 个查询,主要评价指标为各个查询的响应时间,即从提交查询到结果返回所需时间。
1. 测试结论
在 TPC-H 100G 规模的数据集上进行对比测试,共 22 个查询,结果如下:
StarRocks 测试了使用本地存储查询和 Hive 外表查询两种方式,其中 StarRocks Hive 外表和 Trino 查询的是同一份数据,数据采用 ORC 格式存储,zlib 格式压缩。
最终,StarRocks 本地存储查询总耗时为 17s ,StarRocks Hive 外表查询总耗时为 92s,Trino 查询总耗时为187s。
2. 测试准备
2.1 硬件环境
机器 | 4 台阿里云主机 |
---|---|
CPU | 16core Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz |
内存 | 64 GB |
网络带宽 | 5 Gbits/s |
磁盘 | ESSD 云盘 |
2.2 软件环境
StarRocks 和 Trino 部署在相同配置的机器上进行测试,StarRocks 部署 1 个 FE 和 3 个 BE,Trino 部署 1 个 Coordinator 和 3 个 Worker。
-
内核版本:Linux 3.10.0-1127.13.1.el7.x86_64
-
操作系统版本:CentOS Linux release 7.8.2003
-
软件版本:StarRocks 社区版 3.0,Trino-419,Hive-2.3.9
3 测试数据与结果
3.1 测试数据
表 | 行数 |
---|---|
customer | 1500万 |
lineitem | 6亿 |
nation | 25 |
orders | 1.5亿 |
part | 2000万 |
partsupp | 8000万 |
region | 5 |
supplier | 100万 |
3.2 测试结果
查询结果的单位是 ms。 所有查询预热一次,执行三次取平均值作为结果。
Query | StarRocks-native-3.0 | StarRocks-3.0-Hive external | Trino-419 |
---|---|---|---|
Q1 | 1540 | 5660 | 8811 |
Q2 | 100 | 1593 | 3009 |
Q3 | 700 | 5286 | 7891 |
Q4 | 423 | 2110 | 5760 |
Q5 | 1180 | 4453 | 9181 |
Q6 | 56 | 2806 | 4029 |
Q7 | 903 | 4910 | 7158 |
Q8 | 546 | 4766 | 8014 |
Q9 | 2553 | 8010 | 18460 |
Q10 | 776 | 8190 | 9997 |
Q11 | 206 | 920 | 2088 |
Q12 | 166 | 2916 | 4852 |
Q13 | 1663 | 3420 | 7203 |
Q14 | 146 | 3286 | 4995 |
Q15 | 123 | 4173 | 9688 |
Q16 | 353 | 1126 | 2545 |
Q17 | 296 | 3426 | 18970 |
Q18 | 2713 | 7960 | 21763 |
Q19 | 246 | 4406 | 6586 |
Q20 | 176 | 3280 | 6632 |
Q21 | 1410 | 7933 | 16873 |
Q22 | 350 | 1190 | 2788 |
SUM | 16625 | 91820 | 187293 |
4. 测试流程
4.1 StarRocks 本地表测试流程
4.1.1 生成数据
下载 tpch-poc 工具包生成 TPC-H 标准测试集 scale factor=100
的数据。
wget https://starrocks-public.oss-cn-zhangjiakou.aliyuncs.com/tpch-poc-1.0.zip
unzip tpch-poc-1.0
cd tpch-poc-1.0
sh bin/gen_data/gen-tpch.sh 100 data_100
4.1.2 创建表结构
修改配置文件 conf/starrocks.conf
,指定脚本操作的集群地址,重点关注 mysql_host
和 mysql_port
,然后执行建表操作。
sh bin/create_db_table.sh ddl_100
4.1.3 导入数据
sh bin/stream_load.sh data_100
4.1.4 查询数据
sh bin/benchmark.sh