feiniaofeiafei commented on PR #64892:
URL: https://github.com/apache/doris/pull/64892#issuecomment-5788056432

   # 顶部提交 TPC-DS / TPC-H 性能测试
   
   测试日期:2026-09-22。
   
   ## 结论
   
   当前提交 **4bc449f8560** 相比父提交 **4ab2cd71095** 有可复现的 TPC-H 性能退化:
   
   - **TPC-H Q10:慢 18.48% / 32.49%**(正向 / 反向两轮)。新计划在聚合前增加 Hash Exchange,搬运约 
1.147 亿行;两轮 Profile 均确认该新增发送算子有约 4.4 秒的最大执行时间。应优先关注。
   - **TPC-H Q16:慢 7.70% / 10.06%**,绝对差约 0.19~0.24 秒。新计划增加局部聚合及 
Exchange,聚合阶段执行开销增加。
   - TPC-H Q3 基本持平(-2.74% / +0.41%);Q18 两轮小幅加快(-4.42% / -2.79%)。
   - **TPC-DS:已测 10 条查询首轮最佳热跑合计 71.618 → 72.641 秒(+1.43%)**。Q38 的约 5% 
退化在反向复测中保持;Q43、Q89 反向差异缩小,暂不认定为明显退化。
   - **TPC-DS Q39 无有效性能结果**:两个版本均因现有 BE 执行版本 13 不支持要求版本 14 的 `stddev_samp` 
而失败。这是本次环境兼容性限制,不能归因于顶部提交。
   
   以上合计只针对计划变化且成功执行的查询,不能代表整套 TPC-DS/TPC-H 分数。
   
   ## 测试范围与方法
   
   - 分支:`fix/cbo-agg-parent-shuffle-distinct-oom`;只比较顶部一个提交与其父提交。
   - 环境:blackhouse cluster1;TPC-DS SF1000 / TPC-H SF1000;3 台 BE,BE 版本 
`534cef1f20`。
   - 使用 README 指定的 
`run_remote_tpcds_plan_check.sh`、`run_remote_tpcds_perf_compare.sh`、`run_remote_tpch_perf_compare.sh`。
   - 计划检查通过独立 runner 覆盖 99 条 TPC-DS + 22 条 
TPC-H,保持与性能脚本相同的会话配置;`enable_shuffle_key_prune=true`、`eager_aggregation_mode=0`。
   - 两个 FE jar 由各自准确源码通过 `build.sh --fe --exclude-obs-dependencies` 
构建。依赖库完全相同,仅替换 `doris-fe.jar`;没有使用之前留下的旧测试包。
   - 每个版本每条 SQL:首轮一次、热跑两次;表中采用两次热跑的较小值,与原工具口径一致。第二次热跑收集 Profile。
   - 先父提交后当前提交;随后反向复测全部 4 条 TPC-H,以及 TPC-DS Q38/Q43/Q89。所有查询串行执行。
   - 未清空 BE/操作系统缓存,脚本的 Cold 字段只是该阶段首轮。部分首轮和热跑波动明显,因此保留全部原始耗时并进行反向确认。
   - 两轮测试用于识别明显和可复现变化,没有进行统计显著性检验;小幅百分比变化应结合绝对时间解读。
   
   ## 计划变化
   
   - TPC-DS:11/99,Q23、31、38、39、43、46、59、68、79、87、89。
   - TPC-H:4/22,Q3、10、16、18。
   - 其余查询只完成计划检查,未测执行性能。计划相同不等于执行时间绝对相同。
   
   
   
   ## TPC-DS 热跑结果
   
   正数表示当前提交更慢,负数表示更快。反向列仍按“父提交 → 当前提交”展示,已换算原工具的反向标签。
   
   | SQL | 首轮父提交 (ms) | 首轮当前提交 (ms) | 变化 | 反向父提交 (ms) | 反向当前提交 (ms) | 变化 |
   |---|---:|---:|---:|---:|---:|---:|
   | query23 | 36946 | 36807 | -0.38% | — | — | — |
   | query31 | 2491 | 2590 | +3.97% | — | — | — |
   | query38 | 4864 | 5107 | +5.00% | 4964 | 5233 | +5.42% |
   | query43 | 1060 | 1134 | +6.98% | 1066 | 1085 | +1.78% |
   | query46 | 5262 | 5148 | -2.17% | — | — | — |
   | query59 | 5560 | 5669 | +1.96% | — | — | — |
   | query68 | 2415 | 2488 | +3.02% | — | — | — |
   | query79 | 6461 | 6779 | +4.92% | — | — | — |
   | query87 | 5399 | 5647 | +4.59% | — | — | — |
   | query89 | 1160 | 1272 | +9.66% | 1187 | 1225 | +3.20% |
   
   Q39 两个版本均失败,不计入表中。Q38 两轮约慢 0.24~0.27 秒;Q43 反向仅慢 19 毫秒,Q89 反向仅慢 38 毫秒。
   
   ## TPC-H 热跑结果
   
   | SQL | 首轮父提交 (ms) | 首轮当前提交 (ms) | 变化 | 反向父提交 (ms) | 反向当前提交 (ms) | 变化 |
   |---|---:|---:|---:|---:|---:|---:|
   | q3 | 9257 | 9003 | -2.74% | 8978 | 9015 | +0.41% |
   | q10 | 8631 | 10226 | +18.48% | 7760 | 10281 | +32.49% |
   | q16 | 2416 | 2602 | +7.70% | 2376 | 2615 | +10.06% |
   | q18 | 25102 | 23993 | -4.42% | 24787 | 24095 | -2.79% |
   
   4 条查询热跑合计:首轮 45.406 → 45.824 秒(+0.92%);反向 43.901 → 46.006 秒(+4.79%)。Q18 
的小幅改善抵消了部分 Q10 退化,所以合计值会掩盖单查询问题。
   
   ## Profile 证据
   
   ### TPC-H Q10:新增聚合前重分布
   
   - 原计划 Join 后直接聚合;新计划在 Join 与聚合之间新增 Hash Exchange。
   - 首轮 Profile 总耗时 8.615 → 10.197 秒;FE Plan Time 47 → 66 毫秒,无法解释秒级差异。
   - 新增 `DATA_STREAM_SINK_OPERATOR(id=9)` 输入 **114,711,320 行**,`ExecTime` avg 
3.187 秒、max 4.460 秒;反向复测 avg 3.180 秒、max 4.375 秒。这里使用的是执行计时,不把依赖等待当计算耗时。
   - 对应 `RpcMaxTime` 首轮 max 409.747 毫秒,反向 max 451.524 
毫秒;队列等待远小于执行计时。证据更支持新增重分布执行开销,而非仅凭等待计时推测网络故障。
   - 两版 customer 输出 44,539,901 行、lineitem 输出 135,287,933 行、最终聚合输出 44,528,891 
行一致。主要 Join 顺序、build/probe 与 RF 方向未变,未见本次退化来自新的 Join 顺序问题;变化集中在聚合输入的分布策略。
   - Total Instances Num:417 → 441。Profile 
支持“新增重分布很可能是主要退化来源”;不能把并行算子计时简单相加或直接当成端到端差值。
   
   
   ### TPC-H Q16:聚合阶段增加
   
   - Total Instances Num:68 → 92;扫描与主要 Join 行数一致,没有新的 Join 顺序/RF 方向劣化证据。
   - 反向父提交 `AGGREGATION_SINK_OPERATOR(id=9)` 输入 118,694,690 行,`ExecTime` avg 
197.527 毫秒、max 226.517 毫秒。
   - 反向当前提交增加的 `STREAMING_AGGREGATION_OPERATOR(id=9)` 按 `p_brand,p_type,p_size` 
聚合,输出 668,160 行,`ExecTime` avg 485.261 毫秒、max 518.200 毫秒,后接 Exchange 与全局聚合。
   - 首轮新增 Exchange 输入 668,160 行,执行 max 6.517 毫秒;主要额外活跃开销更接近局部聚合而非这个小 
Exchange。与两轮约 0.2 秒的端到端退化方向一致,精确差值还会受并行重叠影响。
   
   
   
   ### TPC-DS Q89:新增 Exchange 很小,差异波动
   
   - 首轮 Profile 总耗时 1.145 → 1.257 秒;新增 Exchange 处理 5574 行,发送执行 max 0.918 
毫秒,`RpcMaxTime` max 1.711 毫秒。
   - 两版 store_sales 输出均为 50,458,571 行,Join/RF 结构一致;不能把首轮全部 112 毫秒差异直接归因于新增 
Exchange。
   - 反向最佳热跑 1.187 → 1.225 秒,仅慢 38 毫秒(3.20%),目前证据不足以认定明显退化。
   
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to