TPC-H benchmark

TPC-H是一个决策支持基准(Decision Support Benchmark),它由一套面向业务的特别查询和并发数据修改组成。查询和填充数据库的数据具有广泛的行业相关性。这个基准测试演示了检查大量数据、执行高度复杂的查询并回答关键业务问题的决策支持系统。TPC-H报告的性能指标称为TPC-H每小时复合查询性能指标(QphH@Size),反映了系统处理查询能力的多个方面。这些方面包括执行查询时所选择的数据库大小,由单个流提交查询时的查询处理能力,以及由多个并发用户提交查询时的查询吞吐量。

本文档主要介绍 Doris 在 TPC-H 测试集上的性能表现。

注1:包括 TPC-H 在内的标准测试集通常和实际业务场景差距较大,并且部分测试会针对测试集进行参数调优。所以标准测试集的测试结果仅能反映数据库在特定场景下的性能表现。建议用户使用实际业务数据进行进一步的测试。

注2:本文档涉及的操作都在 CentOS 7.x 上进行测试。

在 TPC-H 标准测试数据集上的 22 个查询上,我们基于 Doris 1.1 版本和 Doris 0.15.0 RC04 版本进行了对别测试,整体性能提升了 3-4 倍。个别场景下达到十几倍的提升。

image-20220614114351241

1. 硬件环境

硬件配置说明
机器数量4 台腾讯云主机(1个FE,3个BE)
CPUIntel Xeon(Cascade Lake) Platinum 8269CY 16核 (2.5 GHz/3.2 GHz)
内存64G
网络带宽5Gbps
磁盘ESSD云硬盘

2. 软件环境

  • Doris部署 3BE 1FE;
  • 内核版本:Linux version 5.4.0-96-generic (buildd@lgw01-amd64-051)
  • 操作系统版本:CentOS 7.8
  • Doris 软件版本:Apache Doris 1.1 、Apache Doris 0.15.0 RC04
  • JDK:openjdk version “11.0.14” 2022-01-18

3. 测试数据量

整个测试模拟生成100G的数据分别导入到 Doris 0.15.0 RC04 和 Doris 1.1 版本进行测试,下面是表的相关说明及数据量。

TPC-H表名行数导入后大小备注
REGION5400KB区域表
NATION257.714 KB国家表
SUPPLIER100万85.528 MB供应商表
PART2000万752.330 MB零部件表
PARTSUPP8000万4.375 GB零部件供应表
CUSTOMER1500万1.317 GB客户表
ORDERS1.5亿6.301 GB订单表
LINEITEM6亿20.882 GB订单明细表

4. 测试SQL

TPCH 22个测试查询语句 : TPCH-Query-SQL

注意:

以上SQL中的以下四个参数在0.15.0 RC04中不存在,在0.15.0 RC04中执行的时候,去掉:

  1. 1. enable_vectorized_engine=true,
  2. 2. batch_size=4096,
  3. 3. disable_join_reorder=false
  4. 4. enable_projection=true

5. 测试结果

这里我们使用即将发布的 Doris-1.1版本和 Doris-0.15.0 RC04 版本进行对比测试,测试结果如下:

QueryDoris-1.1(s)0.15.0 RC04(s)
Q13.7528.63
Q24.227.88
Q32.649.39
Q41.59.3
Q52.154.11
Q60.190.43
Q71.041.61
Q81.7550.35
Q97.9416.34
Q101.415.21
Q110.351.72
Q120.575.39
Q138.1520.88
Q140.3
Q150.661.86
Q160.791.32
Q171.5126.67
Q183.36411.77
Q190.8291.71
Q202.775.2
Q214.4710.34
Q220.93.22
total51.253223.33

结果说明

  • 测试结果对应的数据集为scale 100, 约6亿条。
  • 测试环境配置为用户常用配置,云服务器4台,16核 64G SSD,1 FE 3 BE 部署。
  • 选用用户常见配置测试以降低用户选型评估成本,但整个测试过程中不会消耗如此多的硬件资源。
  • 测试结果为3次执行取平均值。并且数据经过充分的 compaction(如果在刚导入数据后立刻测试,则查询延迟可能高于本测试结果,compaction的速度正在持续优化中,未来会显著降低)。
  • 0.15 RC04 在 TPC-H 测试中 Q14 执行失败,无法完成查询。

6. 环境准备

请先参照 官方文档 进行 Doris 的安装部署,以获得一个正常运行中的 Doris 集群(至少包含 1 FE 1 BE,推荐 1 FE 3 BE)。

7. 数据准备

7.1 下载安装 TPC-H 数据生成工具

执行以下脚本下载并编译 tpch-tools 工具。

  1. sh build-tpch-dbgen.sh

安装成功后,将在 TPC-H_Tools_v3.0.0/ 目录下生成 dbgen 二进制文件。

7.2 生成 TPC-H 测试集

执行以下脚本生成 TPC-H 数据集:

  1. sh gen-tpch-data.sh

注1:通过 sh gen-tpch-data.sh -h 查看脚本帮助。

注2:数据会以 .tbl 为后缀生成在 tpch-data/ 目录下。文件总大小约100GB。生成时间可能在数分钟到1小时不等。

注3:默认生成 100G 的标准测试数据集

7.3 建表

7.3.1 准备 doris-cluster.conf 文件

在调用导入脚本前,需要将 FE 的 ip 端口等信息写在 doris-cluster.conf 文件中。

文件位置和 load-tpch-data.sh 平级。

文件内容包括 FE 的 ip,HTTP 端口,用户名,密码以及待导入数据的 DB 名称:

  1. # Any of FE host
  2. export FE_HOST='127.0.0.1'
  3. # http_port in fe.conf
  4. export FE_HTTP_PORT=8030
  5. # query_port in fe.conf
  6. export FE_QUERY_PORT=9030
  7. # Doris username
  8. export USER='root'
  9. # Doris password
  10. export PASSWORD=''
  11. # The database where TPC-H tables located
  12. export DB='tpch1'

7.3.2 执行以下脚本生成创建 TPC-H 表

  1. sh create-tpch-tables.sh

或者复制 create-tpch-tables.sql 中的建表语句,在 Doris 中执行。

7.4 导入数据

通过下面的命令执行数据导入:

  1. sh ./load-tpch-data.sh

7.5 检查导入数据

执行下面的 SQL 语句检查导入的数据量上 上面的数据量是一致。

  1. select count(*) from lineitem;
  2. select count(*) from orders;
  3. select count(*) from partsupp;
  4. select count(*) from part;
  5. select count(*) from customer;
  6. select count(*) from supplier;
  7. select count(*) from nation;
  8. select count(*) from region;
  9. select count(*) from revenue0;

7.6 查询测试

执行上面的测试 SQL 或者 执行下面的命令

  1. ./run-tpch-queries.sh

注意:

  1. 目前Doris的查询优化器和统计信息功能还不完善,所以我们在TPC-H中重写了一些查询以适应Doris的执行框架,但不影响结果的正确性

  2. Doris 新的查询优化器将在后续的版本中发布

  3. 执行查询之前设置 set mem_exec_limit=8G