其他分享
首页 > 其他分享> > 【TPC-H】100G性能测试结果

【TPC-H】100G性能测试结果

作者:互联网

概述

本次性能测试分别在同等硬件配置、同等数据规模、同等测试方法、同等测试工具下,对比AtomData、开源ClickHouse基于标准TPC-H的测试结果,针对TPC-H提供的不同应用场景进行不同的测试结果。本次性能测试时间为2022年 6月。

 

TPC-H由TPC委员会制定发布,用于评测数据库的分析查询能力。TPC-H查询包含八张数据表和二十二条复杂SQL查询,大多数查询包含多表Join、子查询和Group By等。更多信息可参考TPC-H测试集(见附录)。

 

石原子AtomData是下一代的企业级云原生实时数仓,是一种基于云上的支持高并发低延时查询的企业级数据仓库的解决方案,提供近乎无限的存储和算力、灵活性和并发性以便您对组织的全量数据进行整合、分析,提取数据的最大价值,获得数据洞察力。

基本信息

Test Tools

TPC-H Rev.3.0.0

Database Size

100G

Test Database

AtomData、ClickHouse

OS

Ubuntu 20.04 (5.4.0-104-generic x86_64)

Report Data

2022-06-10

测试环境

下表列出了本次性能测试所使用的环境信息。

产品

架构

CPU

MEM

Network

版本

AtomData

rc:1个节点
worker:4个节点

64核

rc与worker同等:256GB

万兆

AtomData:1.0

ClickHouse

shard:4个节点
无副本

64核

shard:256GB

万兆

ClickHouse:22.4.4.7

测试结论

 

AtomData

ClickHouse

 

查询耗时总时长(秒)

90.60

6287.66

秒数越少,性能越好

单表查询耗时(秒)

3.22

1.82

秒数越少,性能越好

SQL可执行完整度(条)

22

21

条数越多,性能越好

SQL单条查询优势(条)

19

3

条数越多,性能越好

(注)ClickHouse查询SQL21无法完成测试(原因见下方说明),因此图表的展示上同时去掉了ClickHouse与AtomData的时间。

AtomData与ClickHouse性能优劣分析总结:

  1. 查询耗时总时长:AtomData比ClickHouse快69.4倍
  2. 单表耗时查询:ClickHouse比AtomData快1.77倍
  3. SQL可执行完整度:TPC-H的22条SQL,AtomData均可对22条执行通过,ClickHouse仅能执行通过21条,ClickHouse执行SQL21时报错:Memory Limit,运行查询SQL21将耗用226.62G的内存大小,已经超出了机器所能提供的可用内存大小,本次测试的环境将无法完成SQL21的查询。可见,ClickHouse的内存耗用特别厉害。
  4. SQL单条查询优势:TPC-H的22条SQL为基准:

不建议继续和ClickHouse进行分布式集群的性能对比,ClickHouse主打单表性能,建议后期可进行与ClickHouse的单表性能对比测试,了解AtomData OP在单表性能上与ClicHouse的差距有多大,然后具体分析原因和进行优化,从而提升产品的能力。

测试过程

  1. 安装所测产品并配置分布式集群环境
  2. 构建数据结构
    1. AtomData
    2. Clickhouse
  1. 数据初始化
    1. 构建数据
    2. 导入数据
    3. 验证数据
  1. 编写测试执行脚本
  2. TPC-H测试集

测试方法

测试优化

为保证顺利完成测试,每个产品进行测试之前,进行了必要的配置优化

未进行配置优化,采用默认配置

部分执行参数进行了优化,优化参数内容如下:

set max_bytes_before_external_group_by=800000000000000;
set max_memory_usage=800000000000000;

测试指标

测试指标包括整个TPC-H测试集和单条SQL的执行时长。

测试结果

本文介绍AtomData、ClickHouse、Doris的TPC-H性能测试结果,查询执行时间以秒(s)为单位

 

AtomData

ClickHouse

Q1

0.86

0.22

Q2

1.05

170.04

Q3

2.47

855.77

Q4

2.05

522.28

Q5

3.18

817.43

Q6

0.62

0.40

Q7

2.60

466.02

Q8

3.59

465.79

Q9

7.22

482.23

Q10

2.52

835.68

Q11

1.58

35.22

Q12

2.76

467.91

Q13

5.50

544.60

Q14

0.71

36.01

Q15

1.73

1.20

Q16

1.41

44.95

Q17

23.55

60.07

Q18

7.66

192.83

Q19

1.43

116.20

Q20

6.94

147.99

Q21

7.80

Memory limit

Q22

11.17

24.85

总时长(s)

90.60

6287.66

(重要说明)总时长的计算方式:AtomData和ClickHouse均未计算Q21,ClickHouse执行SQL21时报错:Memory Limit,运行查询SQL21将耗用226.62G的内存大小,已经超出了机器所能提供的可用内存大小,本次测试的环境将无法完成SQL21的查询

数据导入

AtomData:LOAD DATA LOCAL INFILE.....方式进行数据向表中导入。

ClickHouse:insert into方式进行导入,将lineitem、orders、partsupp进行文件切割,再次将数据导入对应的表。

附录:测试过程详解

TPC-H介绍

TPC基准™ H(TPC-H)是一个决策支持基准。它是一套面向业务的即席查询和并发修改。选择的查询和填充数据库的数据具有广泛的行业相关性,同时保持足够的易实现性。该基准说明了决策支持系统:

TPC-H通过在受控条件下对标准数据库执行一组查询来评估各种决策支持系统的性能。TPC-H查询:

准备工作

在进行AtomData、ClickHouse、Doris环境运行和测试TPC-H(Transaction ProcessingPerformance Council) 标准benchmark测试集之前,您需要完成以下准备工作。

构造数据

性能测试以TPC-H 10G数据为测试数据,使用标准的DBGEN工具构造样本数据。从TPC官网下载TPC-H标准的数据生成工具DBGEN,编译后生成二进制可执行文件dbgen

./dbgen -s $scale -C $chunks -S $i -f

-s:指定scale,例如10G时,scale值为10

-C:一共分成几个chunk(注:一条语句只能生成一个chunk)

-S:当前命名生成第几个chunk

导入数据

本文介绍如何将TPC-H 10G的测试数据分别导入到AtomData、ClickHouse、Doris中,下表列出了TPC-H 10G测试数据集中的表数据条数。

表名

数据条数

CUSTOMER

1500,0000

NATION

25

PART

2000,0000

PARTSUPP

8000,0000

REGION

5

SUPPLIER

100,0000

LINEITEM

6,0003,7902

ORDERS

1,5000,0000

AtomData

LOAD DATA LOCAL INFILE '/data8/tpcH/100g/customer.tbl' INTO TABLE customer FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/data8/tpcH/100g/nation.tbl' INTO TABLE nation FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/data8/tpcH/100g/lineitem.tbl' INTO TABLE lineitem FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/data8/tpcH/100g/orders.tbl' INTO TABLE orders FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';   
LOAD DATA LOCAL INFILE '/data8/tpcH/100g/part.tbl' INTO TABLE part FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/data8/tpcH/100g/partsupp.tbl' INTO TABLE partsupp FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/data8/tpcH/100g/region.tbl' INTO TABLE region FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';
LOAD DATA LOCAL INFILE '/data8/tpcH/100g/supplier.tbl' INTO TABLE supplier FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n';

ClickHouse

clickhouse-client -h 192.168.30.118 --port 9000 -u default --password "" -d tpch_single --format_csv_delimiter="|" --query="insert into tpch_single.region format CSV" < /data8/tpcH/data/100g/region.tbl;
clickhouse-client -h 192.168.30.118 --port 9000 -u default --password "" -d tpch_single --format_csv_delimiter="|" --query="insert into tpch_single.nation format CSV" < /data8/tpcH/data/100g/nation.tbl;
clickhouse-client -h 192.168.30.118 --port 9000 -u default --password "" -d tpch_single --format_csv_delimiter="|" --query="insert into tpch_single.supplier format CSV" < /data8/tpcH/data/100g/supplier.tbl;
clickhouse-client -h 192.168.30.118 --port 9000 -u default --password "" -d tpch_single --format_csv_delimiter="|" --query="insert into tpch_single.part format CSV" < /data8/tpcH/data/100g/part.tbl;
clickhouse-client -h 192.168.30.118 --port 9000 -u default --password "" -d tpch_single --format_csv_delimiter="|" --query="insert into tpch_single.customer format CSV" < /data8/tpcH/data/100g/customer.tbl;
clickhouse-client -h 192.168.30.118 --port 9000 -u default --password "" -d tpch_single --format_csv_delimiter="|" --query="insert into tpch_single.lineitem format CSV" < /data8/tpcH/data/100g/lineitem.tbl;
clickhouse-client -h 192.168.30.118 --port 9000 -u default --password "" -d tpch_single --format_csv_delimiter="|" --query="insert into tpch_single.orders format CSV" < /data8/tpcH/data/100g/orders.tbl;
clickhouse-client -h 192.168.30.118 --port 9000 -u default --password "" -d tpch_single --format_csv_delimiter="|" --query="insert into tpch_single.partsupp format CSV" < /data8/tpcH/data/100g/partsupp.tbl;

CreateTable SQL

AtomData

如下给出了customer建表的示例语句,其他7张表采用同样的SQL建表方式即可

CUSTOMER表

CREATE TABLE if not exists `CUSTOMER`
(
    `C_CUSTKEY`    int            NOT NULL,
    `C_NAME`       varchar        NOT NULL,
    `C_ADDRESS`    varchar        NOT NULL,
    `C_NATIONKEY`  int            NOT NULL,
    `C_PHONE`      varchar        NOT NULL,
    `C_ACCTBAL`    decimal(12, 2) NOT NULL,
    `C_MKTSEGMENT` varchar        NOT NULL,
    `C_COMMENT`    varchar        NOT NULL,
    primary key (c_custkey)
) DISTRIBUTE BY HASH(`c_custkey`)
INDEX_ALL='Y';

 

revenue视图

create view revenue (supplier_no, total_revenue) as
    select
        l_suppkey,
        sum(l_extendedprice * (1 - l_discount))
    from
        lineitem
    where
        l_shipdate >= date '1994-08-01'
        and l_shipdate < date '1994-08-01' + interval '3' month
    group by
        l_suppkey;

ClickHouse

如下给出了customer建表的示例语句,其他7张表采用同样的SQL建表方式即可

CUSTOMER表

#本地表
create table customer_local ( 
c_custkey     bigint,
c_name        varchar(25) ,
c_address     varchar(40) ,
c_nationkey   bigint,
c_phone       char(15) ,
c_acctbal     decimal(15,2)   ,
c_mktsegment  char(10) ,
c_comment     varchar(117) 
)engine=MergeTree order by (c_custkey,c_name);
#分布式表
CREATE TABLE tpch.customer AS customer_local ENGINE = Distributed(ck_cluster, tpch, customer_local, rand());

Query SQL

AtomData

以query1为示例,其他的query可自动生成

----【query 1】
select
    l_returnflag,
    l_linestatus,
    sum(l_quantity) as sum_qty,
    sum(l_extendedprice) as sum_base_price,
    sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
    sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
    avg(l_quantity) as avg_qty,
    avg(l_extendedprice) as avg_price,
    avg(l_discount) as avg_disc,
    count(*) as count_order
from
    lineitem
where
    -- l_shipdate <= date '1998-12-01' - interval '90' day (3)
    l_shipdate <= date '1998-12-01' - interval '90' day
group by
    l_returnflag,
    l_linestatus
order by
    l_returnflag,
    l_linestatus;

 

ClickHouse

以query 2为示例,其他的query可自动生成,并进行必要语法的修改即可

-- TPC-H/TPC-R Minimum Cost Supplier Query (Q2)
select
    s.s_acctbal,
    s.s_name,
    n.n_name,
    p.p_partkey,
    p.p_mfgr,
    s.s_address,
    s.s_phone,
    s.s_comment
from
    part as p
    global join partsupp as ps on p.p_partkey = ps.ps_partkey
    global join supplier as s on ps.ps_suppkey = s.s_suppkey 
    global join nation as n on s.s_nationkey = n.n_nationkey
    global join region as r on n.n_regionkey = r.r_regionkey
where
    p.p_size = 15
    and p.p_type like '%BRASS'
    and r.r_name = 'EUROPE'
    and ps.ps_supplycost =(
  select
      min(ps.ps_supplycost)
    from
      partsupp as ps
      global join supplier as s on s.s_suppkey = ps.ps_suppkey
      global join nation as n on s.s_nationkey = n.n_nationkey
      global join region as r on n.n_regionkey = r.r_regionkey
      global join  part as p on p.p_partkey = ps.ps_partkey
      where r.r_name = 'EUROPE'
    )
order by
    s.s_acctbal desc,
    n.n_name,
    s.s_name,
    p.p_partkey
limit 100;       

 

 

 

标签:TPC,100G,AtomData,查询,--,测试,ClickHouse
来源: https://www.cnblogs.com/syw20170419/p/16421150.html