YAOTU INSIGHTS

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

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/dorisTPC-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_HOST127.0.0.1 # 任一 FE 节点地址 export FE_QUERY_PORT9030 # 对应 fe.conf 的 query_port export FE_HTTP_PORT8030 # 对应 http_port,流式导入用 export DBtpcds # 存放测试表的数据库再编译数据生成器,脚本会自动下载 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 数量与机型,只比热总耗时一个数字。调优路线:四个方向按收益排序会话参数:conf/opt/按 SF 分档,tools/tpcds-tools/conf/opt/opt_sf1000.sql 中只调了一个runtime_filter_wait_time_ms(runtime filter 下发等待上限)——数据越大等待越长,SF1000 是 10000ms,SF10000 放大到 100000ms。大表 join 场景先动这个参数,性价比最高。表结构:ddl/建表语句同样按 SF 分档;若把测试表迁移到生产,可对高频过滤列补 Bloom Filter 索引或重调分区粒度。集群配置:BE 侧 conf/be.conf 的内存上限、扫描与交换并行度,FE 侧 conf/fe.conf 的查询相关设置;一次只改一项,各重跑一轮记录差值。查询写法:对result.csv中耗时 Top 3 的查询执行EXPLAIN,排查全表扫描与 join 方向,逐条修。常见问题 FAQQ1: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),仅供参考