From 4fe6401b5db233bb769b0aeb65e1c741221cc068 Mon Sep 17 00:00:00 2001 From: lambxu Date: Fri, 4 Sep 2026 13:58:40 +0800 Subject: [PATCH] [fix](profile) Nereids Optimize Time shows N/A when MV pre-rewrite is skipped MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `getPrettyNereidsOptimizeTime` computes the elapsed time as `optimizeFinish - preRewriteByMvFinish`, but `preRewriteByMvFinish` is only set at the tail of `preMaterializedViewRewrite`, which early-exits whenever pre-rewrite is not needed. The start marker stays at -1, `getPrettyTime` sees -1 and returns "N/A" — even though CBO did run and `optimizeFinish` is set. This misleads users on any query that skips MV pre-rewrite: 1.MV refresh, 2.INSERT, large joins using DpHyper, 3.Sessions with `enable_materialized_view_rewrite=false`, 4.Queries that don't touch any MV at all Example: an MV refresh with `Rewrite Time: 4ms`, `Translate Time:239ms` still prints `Optimize Time: N/A`, misleading anyone reading the profile into thinking CBO was skipped. Fall back the start marker through earlier phase finish times (`preRewriteByMv -> collectTablePartition -> rewrite`) so the elapsed time is shown whenever the upstream phase actually finished. --- .../apache/doris/common/profile/SummaryProfile.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java b/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java index d2f6aea59922ee..05b7ad08e3e12e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java @@ -1046,11 +1046,19 @@ public String getPrettyNereidsCollectTablePartitionTime() { } public String getPrettyNereidsPreRewriteByMvTime() { - return getPrettyTime(nereidsPreRewriteByMvFinishTime, nereidsCollectTablePartitionFinishTime, TUnit.TIME_MS); + long start = nereidsCollectTablePartitionFinishTime != -1 + ? nereidsCollectTablePartitionFinishTime + : nereidsRewriteFinishTime; + return getPrettyTime(nereidsPreRewriteByMvFinishTime, start, TUnit.TIME_MS); } public String getPrettyNereidsOptimizeTime() { - return getPrettyTime(nereidsOptimizeFinishTime, nereidsPreRewriteByMvFinishTime, TUnit.TIME_MS); + long start = nereidsPreRewriteByMvFinishTime != -1 + ? nereidsPreRewriteByMvFinishTime + : (nereidsCollectTablePartitionFinishTime != -1 + ? nereidsCollectTablePartitionFinishTime + : nereidsRewriteFinishTime); + return getPrettyTime(nereidsOptimizeFinishTime, start, TUnit.TIME_MS); } public String getPrettyNereidsTranslateTime() {