news 2026/11/4 6:49:30

99 条复杂 SQL 压一压:Apache Doris TPC-DS 性能测试完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
99 条复杂 SQL 压一压:Apache Doris TPC-DS 性能测试完整指南

99 条复杂 SQL 压一压:Apache Doris TPC-DS 性能测试完整指南

【免费下载链接】dorisApache Doris is an easy-to-use, high performance and unified analytics database.项目地址: https://gitcode.com/gh_mirrors/dori/doris

TPC-DS 基准含 99 条多表连接与窗口函数 SQL,是检验 Apache Doris 查询性能的经典基准。SF1 数据集约 1GB,单机即可跑完一轮 TPC-DS 性能测试;下文按官方脚本顺序,逐步给出命令、产出与注意事项。

全流程一图看懂

所有脚本集中在tools/tpcds-tools/目录,整条链路共 5 步:

步骤目的产出
构建工具编译 TPC-DS 官方 dsdgen/dsqgen 生成器本地 DSGen 可执行程序
生成数据按规模因子 SF 产出 25 张表的数据文件tpcds-data/*.dat
生成查询渲染 99 条待测 SQLqueries/sfN/query1~99.sql
建表 + 导入在 Doris 中建好表并灌入数据可查询的tpcds库
执行查询每条查询冷、热各测耗时result.csv与冷/热总耗时

环境与工具准备:先改好连接配置

为什么先做这一步:后面 4 个脚本全都读取同一份连接参数,配置错了,链路从建表那一步就开始断。

修改 tools/tpcds-tools/conf/doris-cluster.conf,关键 5 项:

export FE_HOST='127.0.0.1' # 任一 FE 节点地址 export FE_QUERY_PORT=9030 # 对应 fe.conf 的 query_port export FE_HTTP_PORT=8030 # 对应 http_port,流式导入用 export DB='tpcds' # 存放测试表的数据库

再编译数据生成器,脚本会自动下载 TPC-DS 3.2.0 工具包并构建,依赖仅unzip:

cd tools/tpcds-tools ./bin/build-tpcds-tools.sh

生成数据与查询:数据规模因子怎么选

规模因子(Scale Factor,简称 SF)是 TPC-DS 的数据量单位,1 SF ≈ 1GB。工具只支持 1、100、1000、10000 四档(查询、建表语句、优化参数都按档位分目录存放),传其他值会直接报错。

选型建议:

  • SF1(约 1GB):功能验证、开发机,生成只需分钟级;
  • SF100(约 100GB):生产集群性能评测的主力档位;
  • SF1000 / SF10000(约 1TB / 10TB):PB 级集群横向对比,生成耗时以小时计,建议用-c提高并行度。
./bin/gen-tpcds-data.sh -s 1 -c 10 # -c 并行度,默认 10,上限 100 ./bin/gen-tpcds-queries.sh -s 1

数据落在tools/tpcds-tools/tpcds-data/,查询落在queries/sf1/,每个编号一个文件。例如 tools/tpcds-tools/queries/sf1/query59.sql 是 CTE + 多层 join 的重查询,通常也是耗时榜首常客。注意:数据目录已存在时脚本会拒绝执行,需先清掉旧目录。

执行测试:建表、导入、跑查询三步

建表:按 SF 自动选取ddl/下对应的建表语句,分区分桶已设计好:

./bin/create-tpcds-tables.sh -s 1

导入数据:依赖curl与jq,走 stream load 通道,lineitem、orders、partsupp三张大表默认 5 路并行,可用-c 10调高;重跑时带上同一个-x <txn_id>可避免重复灌数:

./bin/load-tpcds-data.sh

执行 99 条查询:

./bin/run-tpcds-queries.sh -s 1

有三处机制值得留意:运行前会应用conf/opt/opt_sfN.sql里的会话变量,结束后自动还原(有备份文件),不会污染集群;每条查询先跑 1 次冷启动、再跑 2 次热查询,取两次热跑中较短的计入统计;result.csv边跑边写,可用来盯进度。

结果怎么读:两份总耗时加一张明细表

脚本末尾会输出两行结论,result.csv中每条查询按「冷、热1、热2、采用值」排列,单位均为 ms:

指标含义关注点
Total cold run time99 条冷启动首跑之和含缓存未命中开销,对磁盘与首次加载敏感
Total hot run time99 条两次热跑取优之和比较引擎优化效果的主口径
result.csv 单条耗时每查询明细定位个别异常慢的 SQL

趋势判断方法:

  • SF 从 1 到 100,数据量涨 100 倍,热总耗时应处于同一量级;若耗时涨幅明显超过数据涨幅,通常是个别 join 查询走了低效计划;
  • 冷启动总耗时约为热总耗时的 2~3 倍属正常;差距达数量级时,排查 BE 内存与磁盘缓存;
  • 跨集群对比时,固定 SF、BE 数量与机型,只比热总耗时一个数字。

调优路线:四个方向按收益排序

  1. 会话参数:conf/opt/按 SF 分档,tools/tpcds-tools/conf/opt/opt_sf1000.sql 中只调了一个runtime_filter_wait_time_ms(runtime filter 下发等待上限)——数据越大等待越长,SF1000 是 10000ms,SF10000 放大到 100000ms。大表 join 场景先动这个参数,性价比最高。
  2. 表结构:ddl/建表语句同样按 SF 分档;若把测试表迁移到生产,可对高频过滤列补 Bloom Filter 索引或重调分区粒度。
  3. 集群配置:BE 侧 conf/be.conf 的内存上限、扫描与交换并行度,FE 侧 conf/fe.conf 的查询相关设置;一次只改一项,各重跑一轮记录差值。
  4. 查询写法:对result.csv中耗时 Top 3 的查询执行EXPLAIN,排查全表扫描与 join 方向,逐条修。

常见问题 FAQ

Q1:build-tpcds-tools.sh编译 dbgen 工具失败,怎么办?先升级 GCC;不便升级时,把build-tpcds-dbgen.sh中的工具包名改为TPC-DS_Tools_v3.2.0.zip(官方旧包)再重新编译。更多提示见 tools/tpcds-tools/README.md。

Q2:数据规模定多少才合适?工具只认 1/100/1000/10000 四档。功能验证用 SF1 足够;生产集群做性能评测建议至少 SF100,否则数字不具代表性;PB 级集群才上 SF10000。

Q3:同一轮测试跑两次,总耗时差很多正常吗?正常。脚本采用「1 次冷 + 2 次热」的设计,首跑包含首次加载开销,热跑才稳定。跨轮对比一律以热总耗时为准,并确认两侧使用同一份conf/opt参数文件、集群无其他并发查询。

一轮 TPC-DS 测试花不了半天:改 6 行配置、按 5 步跑脚本,拿到的冷/热总耗时就是你集群在复杂查询场景下可复现的基准。想深入脚本参数或扩充自己的查询集,可参考仓库内tools/tpcds-tools/的原始脚本与文档,也欢迎到 Apache Doris 社区分享你测出的数字与调优经验。

【免费下载链接】dorisApache Doris is an easy-to-use, high performance and unified analytics database.项目地址: https://gitcode.com/gh_mirrors/dori/doris

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/4 6:48:31

医院自助终端信创改造怎么做?全栈国产化路径与选型要点-优胜电子

随着医疗行业数字化建设进入深水区&#xff0c;信创改造已从行政办公系统向核心业务系统延伸。医院自助终端服务系统作为门诊服务的关键载体&#xff0c;其信创适配能力正成为医疗信息化采购的核心评估指标。一、什么是信创环境下的医院自助终端&#xff1f; 信创环境下的医院自…

作者头像 李华
网站建设 2026/11/4 6:47:27

REA 逆向工程安装教程:3 条命令让 AI 助手上手二进制分析

REA 逆向工程安装教程&#xff1a;3 条命令让 AI 助手上手二进制分析 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea 把一份没有源码的目标——打包…

作者头像 李华
网站建设 2026/11/4 6:47:25

Linux基本开发工具:make和makefile的使用

目录 一.认识make和makefile 1.1背景 1.2如何理解make和makefile 1.3基本使用 1.4推导过程 1.5适度扩展语法 一.认识make和makefile 1.1背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数&#xff0c;其按类…

作者头像 李华
网站建设 2026/11/4 6:44:07

CIoU + DFL:目标检测定位精度的“双引擎”协同深度解析

摘要 在当今实时目标检测领域,YOLO系列模型凭借其卓越的速度与精度平衡,成为了工业界和学术界的事实标准之一。无论是YOLOv8、YOLO11还是未来的迭代版本,其性能的持续突破,不仅源于网络架构的创新(如C2f模块、解耦头、Anchor-Free设计),更深层次地依赖于其精巧设计的损…

作者头像 李华
网站建设 2026/11/4 6:43:46

教学资源库|基于Java+vue的教学资源库系统(源码+数据库+文档)

教学资源库系统 目录 基于springbootvue的在线教育系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c;阿里云…

作者头像 李华
网站建设 2026/11/4 6:31:09

构建智能医疗影像分析系统:Hermes Agent病灶检测与诊断全指南

构建智能医疗影像分析系统&#xff1a;Hermes Agent病灶检测与诊断全指南 Hermes Agent是一款功能强大的AI代理框架&#xff0c;能够帮助开发者快速构建智能医疗影像分析系统&#xff0c;实现高效的病灶检测与诊断。本文将详细介绍如何利用Hermes Agent的核心功能&#xff0c;…

作者头像 李华