From 446db3def60665b63b97069da81dce2a6925f164 Mon Sep 17 00:00:00 2001 From: minghong Date: Wed, 19 Apr 2023 12:14:55 +0800 Subject: [PATCH] [opt](nereids) estimate broadcast cost by a new formula (#18744) estimate broadcast cost by an experience formula: beNumber^0.5 * rowCount 1. sender number and receiver number is not available at RBO stage now, so we use beNumber 2. senders and receivers work in parallel, that why we use square of beNumber --- .../main/java/org/apache/doris/nereids/cost/CostModelV1.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModelV1.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModelV1.java index 60a1f9c9b1..38bbd52a3e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModelV1.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/cost/CostModelV1.java @@ -174,10 +174,13 @@ class CostModelV1 extends PlanVisitor { || childStatistics.getRowCount() > rowsLimit) { return CostV1.of(Double.MAX_VALUE, Double.MAX_VALUE, Double.MAX_VALUE); } + // estimate broadcast cost by an experience formula: beNumber^0.5 * rowCount + // - sender number and receiver number is not available at RBO stage now, so we use beNumber + // - senders and receivers work in parallel, that why we use square of beNumber return CostV1.of( 0, 0, - childStatistics.getRowCount() * beNumber); + childStatistics.getRowCount() * Math.pow(beNumber, 0.5)); }