Apache Doris TPC-DS 基准测试完整指南:99 条复杂查询快速跑通与优化
Apache Doris TPC-DS 基准测试完整指南:99 条复杂查询快速跑通与优化
【免费下载链接】dorisApache Doris is an easy-to-use, high performance and unified analytics database.项目地址: https://gitcode.com/gh_mirrors/dori/doris
Apache Doris 的 TPC-DS 测试用 99 条复杂决策分析查询压测大数据集上的查询性能,从建表、导入到出报告是一条完整可复现的闭环。本文按实操顺序带你走完这套基准测试流程,并教你读懂报告、定位慢查询、落地优化。
选 TPC-DS 作为量尺:标准本身与工具分工
TPC-DS(Transaction Processing Performance Council - Decision Support)是 TPC 委员会发布的决策支持类基准标准,模拟报表生成、即席查询、数据挖掘等真实商业分析负载。它由 99 条复杂 SQL 组成,多表连接、子查询、窗口聚合交织在一起,比单表查询更能拉开不同分析引擎的差距。数据规模用 SF(Scale Factor)表示,1 个 SF 约对应 1GB 数据,从 SF1 到 SF1000 可平滑放大压力。
Doris 把整套测试工具收敛在tools/tpcds-tools/目录下,各子目录分工明确:
conf/:集群连接配置与按 SF 区分的查询优化参数;queries/:按 SF 归档的 99 条测试查询;ddl/:建表语句;- tools/tpcds-tools/README.md:完整使用说明。
从零到跑通:一次完整 TPC-DS 测试走查
TPC-DS 测试环境怎么配:连接参数与工具编译
先让工具连上你的 Doris 集群。打开 tools/tpcds-tools/conf/doris-cluster.conf,只需改六个参数:
export FE_HOST='127.0.0.1' # FE 节点地址 export FE_HTTP_PORT=8030 # 对应 fe.conf 中的 http_port export FE_QUERY_PORT=9030 # 对应 fe.conf 中的 query_port export USER='root' # 登录用户名 export PASSWORD='' # 登录密码 export DB='tpcds' # 测试表所在数据库名⚠️ 两个端口分别对应 FE 的 http_port 与 query_port,改错任何一项都会连接失败。
接下来编译官方工具链。脚本会自动下载 TPC-DS 数据生成器 dsdgen 与查询生成器 dsqgen 的源码并完成编译:
./bin/build-tpcds-tools.sh⚠️ 若编译失败,通常是 GCC 版本过低或工具包下载异常。可按 tools/tpcds-tools/README.md 的提示,把build-tpcds-dbgen.sh中的下载包名TPC-DS_Tools_v3.2.0new.zip改为TPC-DS_Tools_v3.2.0.zip后重试。
按 SF 生成 TPC-DS 测试数据与查询
-s参数指定数据规模因子:SF 即 Scale Factor,1 个 SF 约对应 1GB 数据。
./bin/gen-tpcds-data.sh -s 1SF=1 生成约 1GB 数据集,适合快速冒烟验证;要上正式压测,把-s换成 100(约 100GB):
./bin/gen-tpcds-data.sh -s 100数据文件默认落在data/tpcds/sf${SCALE}/目录。查询侧同理,一条命令即可产出与 SF 匹配的语句:
./bin/gen-tpcds-queries.sh -s 1产物存放在queries/sf1/下;换 SF 时工具会自动按数据规模调整查询内容,不需要手工改写。
建表、导入、执行:三条命令串成测试闭环
闭环第一步建表。脚本会读取ddl/下与当前 SF 匹配的 DDL,在tpcds库中创建全部测试表,表结构已按 Doris 特性做过分布、分区与索引层面的考量:
./bin/create-tpcds-tables.sh -s 1第二步导入数据:
./bin/load-tpcds-data.sh工具会启用批量加载与分区并行加载来提升导入效率。加载完成后可用 MySQL 客户端连入集群,核对各表行数是否齐整。
第三步执行全部查询:
./bin/run-tpcds-queries.sh -s 199 条查询依次执行,工具逐条记录耗时,最终汇总成测试报告。
读懂测试报告:四个关键指标与瓶颈判断
报告核心是四个指标,各自回答一个不同的问题:
- 单条查询耗时:反映 Doris 处理某类具体查询的能力,是定位慢 SQL 的起点;
- 平均查询耗时:整体性能的"水位线",适合跨版本、跨配置横向对比;
- 最长查询耗时:暴露 worst-case,通常对应最重的多表聚合或嵌套子查询;
- 查询吞吐量:单位时间完成的查询数,衡量系统并发承载能力。
瓶颈判断看增长趋势:对比 SF 从小到大(如 SF1 → SF100)同一查询的耗时变化。若增长接近线性,说明引擎随数据规模扩展正常;若某条查询显著超线性膨胀,大概率是数据量敏感的环节出了问题——全表扫描、低效连接、分区裁剪未生效等,这条查询就值得优先解剖。
性能优化四抓手:配置、表结构、执行计划与 SF 参数
- 调集群参数:结合报告定位资源瓶颈后,调整 conf/fe.conf 与 conf/be.conf 中的内存分配、线程数等参数,让资源匹配负载画像。
- 调表结构:按查询特征细化分区粒度、调整分桶方式;对高频过滤字段补 Bloom Filter 索引,让点查与过滤更快命中。
- 用 EXPLAIN 解剖慢查询:对耗时靠前的查询执行
EXPLAIN,从执行计划中找出全表扫描、低效连接方式等瓶颈,针对性改写。 - 按 SF 套用查询优化参数:
conf/opt/下提供了按数据规模区分的优化参数文件(opt_sf1.sql至opt_sf10000.sql),例如 tools/tpcds-tools/conf/opt/opt_sf1000.sql 对应 SF=1000,可结合实测情况裁剪后套用。
工具脚本、目录结构、各 SF 档位的操作细节都有完整说明,深入阅读可参考 tools/tpcds-tools/README.md,按自己集群的规模跑一轮完整测试即可上手。
【免费下载链接】dorisApache Doris is an easy-to-use, high performance and unified analytics database.项目地址: https://gitcode.com/gh_mirrors/dori/doris
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考