TPC-DS 性能测试
TPC-DS 是美国交易处理效能委员会 TPC(Transaction Processing Performance Council)组织制定的用来模拟决策支持系统的测试集。与 TPC-H 相比,TPC-DS 是一个更加复杂和全面的基准测试集。
TPC-DS 是一套决策支持系统的基准测试,它对决策支持系统的几个通用方面进行建模,包括查询和数据维护,用于衡量大数据产品的分析性能。TPC-DS 模拟了零售企业三种销售渠道(实体店、互联网、目录)的销售和退货业务,除了建立相关销售和退货模型的表格,它还包括一个简单的库存系统和一个促销系统。该测试共包含 24 张表,数据量可设定从 1 GB 到 3 TB 不等。基准测试共包含 99 个复杂查询,主要的评价指标为各个查询的响应时间,即从提交查询到结果返回所需时间。
1. 测试结论
在 TPC-DS 100 GB 规模的数据集上进行对比测试,共 99 个查询,测试结果如下:
StarRocks 测试了使用本地存储查询和 Hive 外表查询两种方式,其中 StarRocks Hive 外表查询和 Trino 查询的是同一份数据,数据采用 Parquet 格式存储,LZ4 格式压缩。
最终,StarRocks 本地存储查询总耗时为 174s,StarRocks Hive 外表查询总耗时为 239s,StarRocks Hive 外表查询开启 Data Cache 后查询总耗时为 176s,Trino 查询总耗时为 892s。
StarRocks 本地存储查询性能是 Trino 的 5.1 倍,StarRocks Hive 外表查询是 Trino 的 3.7 倍,StarRocks Hive 外表查询开启 Data Cache 后查询性能是 Trino 的 5 倍。
2. 测试准备
2.1 硬件环境
机器 | 4 台阿里云主机 |
---|---|
CPU | 8core Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz |
内存 | 32 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-3.1.2
3. 测试数据与结果
3.1 测试数据
表 | 行数 |
---|---|
call_center | 30 |
catalog_page | 20400 |
catalog_returns | 14404374 |
catalog_sales | 143997065 |
customer_address | 1000000 |
customer_demographics | 1920800 |
customer | 2000000 |
date_dim | 73049 |
household_demographics | 7200 |
income_band | 20 |
inventory | 399330000 |
item | 204000 |
promotion | 1000 |
reason | 55 |
ship_mode | 20 |
store | 402 |
store_returns | 28795080 |
store_sales | 287997024 |
time_dim | 86400 |
warehouse | 15 |
web_page | 2040 |
web_returns | 7197670 |
web_sales | 72001237 |
web_site | 24 |
3.2 测试结果
说明:
- 查询结果的单位是 ms。
- 所有查询预热一次,执行三次取平均值作为结果。
StarRocks-3.0.5-native
表示使用 StarRocks 本地存储,StarRocks-3.0-Hive external
表示通过 Catalog 查询 Hive 外表,StarRocks-3.0-Hive external-Cache
表示通过 Catalog 查询 Hive 外表并开启 StarRocks 的 Data Cache 特性。- StarRocks 开启聚合下推优化
SET global cbo_push_down_aggregate_mode = 0
。
Query | StarRocks-3.0.5-native | StarRocks-3.0-Hive external | StarRocks-3.0-Hive external-Cache | Trino-419 |
---|---|---|---|---|
SUM | 174157 | 238590 | 175970 | 891892 |
Q1 | 274 | 780 | 254 | 1681 |
Q2 | 338 | 676 | 397 | 10200 |
Q3 | 455 | 1156 | 628 | 3156 |
Q4 | 16180 | 13229 | 12623 | 48176 |
Q5 | 1162 | 773 | 506 | 4490 |
Q6 | 397 | 606 | 165 | 1349 |
Q7 | 898 | 1707 | 724 | 2300 |
Q8 | 532 | 447 | 141 | 2330 |
Q9 | 2113 | 7998 | 6336 | 17734 |
Q10 | 588 | 847 | 285 | 2498 |
Q11 | 6465 | 5086 | 4665 | 31333 |
Q12 | 149 | 302 | 135 | 728 |
Q13 | 1573 | 2661 | 1349 | 4370 |
Q14 | 7928 | 7811 | 5955 | 69729 |
Q15 | 323 | 461 | 199 | 1522 |
Q16 | 639 | 1278 | 661 | 3282 |
Q17 | 1157 | 898 | 682 | 4102 |
Q18 | 540 | 1746 | 521 | 2471 |
Q19 | 667 | 639 | 230 | 1701 |
Q20 | 209 | 369 | 144 | 849 |
Q21 | 466 | 586 | 306 | 1591 |
Q22 | 3876 | 4704 | 4536 | 17422 |
Q23 | 24500 | 24746 | 21707 | 145850 |
Q24 | 1256 | 5220 | 3219 | 21234 |
Q25 | 1037 | 792 | 542 | 3702 |
Q26 | 393 | 834 | 360 | 1737 |
Q27 | 742 | 1303 | 696 | 2396 |
Q28 | 1864 | 8600 | 6564 | 15837 |
Q29 | 1097 | 1134 | 888 | 4024 |
Q30 | 194 | 669 | 242 | 1922 |
Q31 | 1149 | 1070 | 834 | 5431 |
Q32 | 222 | 718 | 104 | 1706 |
Q33 | 922 | 735 | 327 | 2048 |
Q34 | 544 | 1392 | 576 | 3185 |
Q35 | 974 | 897 | 574 | 3050 |
Q36 | 630 | 1009 | 464 | 3056 |
Q37 | 246 | 791 | 273 | 3258 |
Q38 | 2831 | 2017 | 1695 | 10913 |
Q39 | 1057 | 2312 | 1324 | 10665 |
Q40 | 331 | 560 | 209 | 2678 |
Q41 | 57 | 148 | 79 | 776 |
Q42 | 463 | 559 | 106 | 1213 |
Q43 | 885 | 602 | 342 | 2914 |
Q44 | 506 | 3783 | 2306 | 9705 |
Q45 | 439 | 777 | 309 | 1012 |
Q46 | 868 | 1746 | 1037 | 4766 |
Q47 | 1816 | 2979 | 2684 | 19111 |
Q48 | 635 | 2038 | 1202 | 3635 |
Q49 | 1440 | 2754 | 1168 | 3435 |
Q50 | 836 | 2053 | 1305 | 4375 |
Q51 | 3966 | 5258 | 4466 | 14283 |
Q52 | 483 | 436 | 100 | 1126 |
Q53 | 698 | 802 | 391 | 1648 |
Q54 | 794 | 970 | 534 | 5146 |
Q55 | 463 | 540 | 97 | 963 |
Q56 | 874 | 695 | 240 | 2110 |
Q57 | 1717 | 2723 | 2372 | 10203 |
Q58 | 554 | 727 | 242 | 2053 |
Q59 | 2764 | 1581 | 1368 | 15697 |
Q60 | 1053 | 557 | 389 | 2421 |
Q61 | 1353 | 1026 | 439 | 2334 |
Q62 | 453 | 659 | 427 | 2422 |
Q63 | 709 | 943 | 374 | 1624 |
Q64 | 3209 | 6968 | 6175 | 31994 |
Q65 | 2147 | 3043 | 2451 | 9334 |
Q66 | 688 | 805 | 437 | 2598 |
Q67 | 15486 | 23743 | 21975 | 58091 |
Q68 | 965 | 1702 | 776 | 2710 |
Q69 | 600 | 703 | 263 | 2872 |
Q70 | 2376 | 2217 | 1588 | 10272 |
Q71 | 702 | 691 | 348 | 3074 |
Q72 | 1764 | 2733 | 2305 | 13973 |
Q73 | 576 | 1145 | 484 | 1899 |
Q74 | 4615 | 3884 | 3776 | 18749 |
Q75 | 2661 | 3479 | 3137 | 10858 |
Q76 | 450 | 2001 | 1014 | 5297 |
Q77 | 1109 | 743 | 317 | 2810 |
Q78 | 6540 | 7198 | 5890 | 19671 |
Q79 | 1116 | 1953 | 1121 | 4406 |
Q80 | 2290 | 1973 | 1480 | 5865 |
Q81 | 247 | 1024 | 317 | 1729 |
Q82 | 392 | 929 | 407 | 3605 |
Q83 | 134 | 313 | 158 | 1209 |
Q84 | 107 | 820 | 228 | 2448 |
Q85 | 460 | 2045 | 621 | 4311 |
Q86 | 433 | 999 | 387 | 1693 |
Q87 | 2873 | 2159 | 1779 | 10709 |
Q88 | 3616 | 7076 | 5432 | 26002 |
Q89 | 735 | 785 | 454 | 1997 |
Q90 | 174 | 898 | 232 | 2585 |
Q91 | 113 | 495 | 139 | 1745 |
Q92 | 203 | 627 | 91 | 1016 |
Q93 | 529 | 2508 | 1422 | 12265 |
Q94 | 475 | 811 | 598 | 2153 |
Q95 | 1059 | 1993 | 1526 | 8058 |
Q96 | 395 | 1197 | 681 | 3976 |
Q97 | 3000 | 3459 | 2860 | 6818 |
Q98 | 419 | 486 | 344 | 2090 |
Q99 | 755 | 1070 | 740 | 4332 |
4. 测试流程
4.1 StarRocks 本地表测试流程
4.1.1 生成数据
下载 tpcds-poc 工具包生成 TPC-DS 标准测试集 scale factor=100
的数据。
wget https://starrocks-public.oss-cn-zhangjiakou.aliyuncs.com/tpcds-poc-1.0.zip
unzip tpcds-poc-1.0
cd tpcds-poc-1.0
sh bin/gen_data/gen-tpcds.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 -p -d tpcds
4.2 StarRocks Hive 外表测试流程
4.2.1 创建表结构
在 Hive 中创建外部表,外部表存储格式是 Parquet,压缩格式是 LZ4。详细建表语句见 5.3 创建 Parquet 格式 Hive 外表,这个 Hive 外部表就是 StarRocks 和 Trino 对比测试查询的表。
4.2.2 导入数据
将 4.1.1 StarRocks 本地表测试 中生成的 TPC-DS CSV 原始数据上传到 HDFS 指定路径,本文以路径 /user/tmp/csv/
为例,然后在 Hive 中创建 CSV 格式外部表,存储路径为 /user/tmp/csv/
,详细建表语句见 5.4 创建 CSV 格式 Hive 外表。
通过 INSERT INTO 命令将 CSV 格式外部表的数据导入到 Parquet 格式外部表中,这样就得到了存储格式为 Parquet,压缩格式为 LZ4 的数据,导入命令如下:
use tpcds_100g_parquet_lz4;
insert into call_center select * from tpcds_100g_csv.call_center order by cc_call_center_sk;
insert into catalog_page select * from tpcds_100g_csv.catalog_page order by cp_catalog_page_sk;
insert into catalog_returns select * from tpcds_100g_csv.catalog_returns order by cr_returned_date_sk, cr_item_sk;
insert into date_dim select * from tpcds_100g_csv.date_dim order by D_DATE_SK;
insert into household_demographics select * from tpcds_100g_csv.household_demographics order by HD_DEMO_SK;
insert into income_band select * from tpcds_100g_csv.income_band order by IB_INCOME_BAND_SK;
insert into item select * from tpcds_100g_csv.item order by I_ITEM_SK;
insert into promotion select * from tpcds_100g_csv.promotion order by P_PROMO_SK;
insert into reason select * from tpcds_100g_csv.reason a order by a.R_REASON_SK;
insert into ship_mode select * from tpcds_100g_csv.ship_mode order by SM_SHIP_MODE_SK;
insert into store select * from tpcds_100g_csv.store order by S_STORE_SK;
insert into time_dim select * from tpcds_100g_csv.time_dim order by T_TIME_SK;
insert into warehouse select * from tpcds_100g_csv.warehouse order by W_WAREHOUSE_SK;
insert into web_page select * from tpcds_100g_csv.web_page order by WP_WEB_PAGE_SK;
insert into web_site select * from tpcds_100g_csv.web_site order by WEB_SITE_SK;
insert into customer_demographics select * from tpcds_100g_csv.customer_demographics order by CD_DEMO_SK;
insert into customer select * from tpcds_100g_csv.customer order by C_CUSTOMER_SK;
insert into customer_address select * from tpcds_100g_csv.customer_address order by CA_ADDRESS_SK;
insert into web_sales select * from tpcds_100g_csv.web_sales order by WS_SOLD_DATE_SK, WS_ITEM_SK;
insert into web_returns select * from tpcds_100g_csv.web_returns order by WR_RETURNED_DATE_SK, WR_ITEM_SK;
insert into inventory select * from tpcds_100g_csv.inventory order by INV_DATE_SK, INV_ITEM_SK;
insert into catalog_sales select * from tpcds_100g_csv.catalog_sales order by CS_SOLD_DATE_SK, CS_ITEM_SK;
insert into store_returns select * from tpcds_100g_csv.store_returns order by SR_RETURNED_DATE_SK, SR_ITEM_SK;
insert into store_sales select * from tpcds_100g_csv.store_sales order by SS_SOLD_DATE_SK, SS_ITEM_SK;
4.2.3 收集统计信息
StarRocks 3.0 版本不支持收集外部表的统计信息,使用 Hive 收集列级别统计信息。
use tpcds_100g_parquet_lz4;
analyze table call_center compute statistics FOR COLUMNS;
analyze table catalog_page compute statistics FOR COLUMNS;
analyze table catalog_returns compute statistics FOR COLUMNS;
analyze table catalog_sales compute statistics FOR COLUMNS;
analyze table customer compute statistics FOR COLUMNS;
analyze table customer_address compute statistics FOR COLUMNS;
analyze table customer_demographics compute statistics FOR COLUMNS;
analyze table date_dim compute statistics FOR COLUMNS;
analyze table household_demographics compute statistics FOR COLUMNS;
analyze table income_band compute statistics FOR COLUMNS;
analyze table inventory compute statistics FOR COLUMNS;
analyze table item compute statistics FOR COLUMNS;
analyze table promotion compute statistics FOR COLUMNS;
analyze table reason compute statistics FOR COLUMNS;
analyze table ship_mode compute statistics FOR COLUMNS;
analyze table store compute statistics FOR COLUMNS;
analyze table store_returns compute statistics FOR COLUMNS;
analyze table store_sales compute statistics FOR COLUMNS;
analyze table time_dim compute statistics FOR COLUMNS;
analyze table warehouse compute statistics FOR COLUMNS;
analyze table web_page compute statistics FOR COLUMNS;
analyze table web_returns compute statistics FOR COLUMNS;
analyze table web_sales compute statistics FOR COLUMNS;
analyze table web_site compute statistics FOR COLUMNS;