Apache Doris TPC-DS测试:大数据集查询性能
你是否还在为大数据分析平台的查询性能发愁?当面对TB级甚至PB级数据时,传统数据库往往力不从心,查询超时、资源占用过高成为常态。本文将带你通过TPC-DS基准测试,全面了解Apache Doris在大数据集场景下的查询性能表现。读完本文,你将掌握如何使用TPC-DS工具测试Apache Doris性能,了解其在不同数据规模下的查询效率,并学会如何根据测试结果优化集群配置。
TPC-DS测试概述
TPC-DS(Transaction Processing Performance Council - Decision Support)是由TPC委员会制定的面向决策支持系统的基准测试标准,它模拟了复杂的商业应用场景,包含大量复杂的SQL查询,涵盖报表生成、即席查询、数据挖掘等多种应用类型。Apache Doris作为一款高性能的统一分析型数据库,提供了专门的TPC-DS测试工具,帮助用户评估其在大数据集上的查询性能。
Apache Doris的TPC-DS测试工具位于项目的tools/tpcds-tools/目录下,该目录包含了测试所需的配置文件、查询脚本和数据生成工具等。主要文件结构如下:
- tools/tpcds-tools/conf/:包含测试配置文件,如集群配置、查询优化参数等
- tools/tpcds-tools/queries/:包含不同数据规模(SF1、SF100、SF1000等)的TPC-DS查询语句
- tools/tpcds-tools/ddl/:包含创建TPC-DS测试表的DDL语句
- tools/tpcds-tools/README.md:测试工具的使用说明文档
TPC-DS测试环境准备
在进行TPC-DS测试之前,需要先准备测试环境,包括配置Doris集群信息和安装TPC-DS测试工具。
配置Doris集群信息
Doris集群的配置信息存储在tools/tpcds-tools/conf/doris-cluster.conf文件中,主要包括以下参数:
# Doris FE节点地址
export FE_HOST='127.0.0.1'
# FE HTTP端口(对应fe.conf中的http_port)
export FE_HTTP_PORT=8030
# FE查询端口(对应fe.conf中的query_port)
export FE_QUERY_PORT=9030
# 数据库用户名
export USER='root'
# 数据库密码
export PASSWORD=''
# TPC-DS测试表所在的数据库名
export DB='tpcds'
根据实际的Doris集群环境,修改上述配置参数,确保测试工具能够正确连接到Doris集群。
安装TPC-DS测试工具
TPC-DS测试需要使用TPC-DS官方提供的数据生成工具(dsdgen)和查询生成工具(dsqgen)。Apache Doris的TPC-DS测试工具提供了一键编译脚本,可自动下载并编译这些工具:
./bin/build-tpcds-tools.sh
如果编译过程中出现错误,可能是由于GCC版本过低或TPC-DS工具包下载问题。根据tools/tpcds-tools/README.md中的提示,如果dbgen工具编译失败,可以尝试将build-tpcds-dbgen.sh脚本中的"TPC-DS_Tools_v3.2.0new.zip"修改为"TPC-DS_Tools_v3.2.0.zip",然后重新执行编译命令。
生成TPC-DS测试数据和查询
TPC-DS测试使用"数据规模因子"(Scale Factor,简称SF)来表示数据量大小,1个SF约对应1GB数据。Doris的TPC-DS测试工具支持生成不同SF的测试数据和查询语句。
生成测试数据
使用以下命令生成TPC-DS测试数据,其中-s参数指定数据规模因子:
./bin/gen-tpcds-data.sh -s 1
上述命令将生成SF=1(约1GB)的测试数据。如果需要生成更大规模的测试数据,例如SF=100(约100GB),可以将-s参数的值改为100:
./bin/gen-tpcds-data.sh -s 100
生成的数据将存储在指定的目录中,默认情况下,数据文件位于data/tpcds/sf${SCALE}/目录下。
生成测试查询
TPC-DS测试包含99条复杂的SQL查询语句,测试工具可以根据指定的SF生成对应的查询语句:
./bin/gen-tpcds-queries.sh -s 1
生成的查询语句将存储在tools/tpcds-tools/queries/sf1/目录下(对应SF=1)。对于不同的SF,查询语句可能会有所调整,例如更大的SF可能需要更复杂的聚合操作或更多的表连接。测试工具会自动根据SF值生成适配的查询语句。
执行TPC-DS测试
TPC-DS测试主要包括创建测试表、加载测试数据和执行测试查询三个步骤。
创建测试表
首先需要在Doris中创建TPC-DS测试表。测试工具提供了一键创建表的脚本,该脚本会根据tools/tpcds-tools/ddl/目录中的DDL语句创建测试表:
./bin/create-tpcds-tables.sh -s 1
该命令会在Doris的tpcds数据库中创建所有TPC-DS测试表,表结构设计考虑了数据分布、分区和索引等优化,以提高查询性能。
加载测试数据
创建测试表后,需要将生成的测试数据加载到Doris中。使用以下命令加载数据:
./bin/load-tpcds-data.sh
数据加载过程中,测试工具会根据Doris的特性进行优化,例如使用批量加载、分区并行加载等方式,提高数据加载效率。加载完成后,可以通过Doris的客户端工具(如MySQL客户端)连接到Doris集群,检查数据是否加载成功。
执行测试查询
最后,执行TPC-DS测试查询,评估Doris的查询性能:
./bin/run-tpcds-queries.sh -s 1
测试工具会依次执行所有99条查询语句,并记录每条查询的执行时间。执行完成后,会生成测试报告,包含每条查询的平均执行时间、总执行时间等统计信息。
测试结果分析与优化
TPC-DS测试结果可以帮助我们了解Doris在不同查询场景下的性能表现,从而有针对性地进行优化。
测试结果解读
测试报告中主要关注以下指标:
- 单条查询执行时间:反映Doris对特定查询的处理能力
- 平均查询执行时间:反映Doris的整体查询性能
- 最长查询执行时间:反映系统的 worst-case 性能
- 查询吞吐量:单位时间内能够完成的查询数量
通过对比不同SF下的测试结果,可以分析Doris的性能随数据规模增长的变化趋势。例如,当SF从1增加到100时,查询执行时间的增长是否线性,是否存在性能瓶颈。
查询优化建议
根据测试结果,可以从以下几个方面优化Doris的查询性能:
-
调整集群配置:根据测试结果调整Doris的FE和BE配置参数,例如conf/fe.conf和conf/be.conf中的内存分配、线程数等参数。
-
优化表结构:根据查询特点调整测试表的分区策略、分桶方式和索引类型。例如,对于频繁过滤的字段,可以创建 Bloom Filter 索引;对于大表,可以采用更细粒度的分区。
-
优化查询语句:分析执行时间较长的查询语句,通过查看执行计划(
EXPLAIN命令)找出性能瓶颈,例如是否存在全表扫描、低效的表连接方式等,并进行针对性优化。 -
使用查询优化参数:Doris的TPC-DS测试工具提供了查询优化参数文件,位于tools/tpcds-tools/conf/opt/目录下,例如tools/tpcds-tools/conf/opt/opt_sf1000.sql是针对SF=1000的查询优化参数,可以根据实际情况调整这些参数,提高查询性能。
总结与展望
通过TPC-DS基准测试,我们可以全面评估Apache Doris在大数据集场景下的查询性能。本文介绍了TPC-DS测试的基本流程,包括环境准备、数据生成、查询执行和结果分析等步骤,并提供了相关的工具使用方法和优化建议。
Apache Doris作为一款高性能的分析型数据库,在TPC-DS测试中表现出色,能够高效处理复杂的查询场景和大规模的数据。随着数据量的不断增长和查询复杂度的提高,Doris团队将持续优化查询引擎和存储结构,进一步提升性能。
如果你对Doris的TPC-DS测试感兴趣,可以参考tools/tpcds-tools/README.md中的详细说明,尝试在自己的集群环境中进行测试。同时,欢迎参与Doris社区的讨论,分享你的测试经验和优化建议。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



