>From Vijay Sarathy <[email protected]>:

Vijay Sarathy has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18423 )


Change subject: [ASTERIXDB-3450][COMP] CBO not picking broadcast join for very 
small tables
......................................................................

[ASTERIXDB-3450][COMP] CBO not picking broadcast join for very small tables

Change-Id: Ie04758aca3142669811881fad0cda8750c9e2f9b
---
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
2 files changed, 20 insertions(+), 11 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/23/18423/1

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
index e842b7b..e9a8c6f 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinEnum.java
@@ -750,7 +750,7 @@
                     jn.aliases.addAll(jnJ.aliases);
                     Collections.sort(jn.aliases);
                     jn.size = jnI.size + jnJ.size; // These are the original 
document sizes
-                    jn.setCardinality(jn.computeJoinCardinality(), true);
+                    jn.setCardinality(jn.computeJoinCardinality());
                     jn.setSizeVarsAfterScan(jnI.getSizeVarsAfterScan() + 
jnJ.getSizeVarsAfterScan());
                 } else {
                     addPlansToThisJn = jnNewBits.jnIndex;
@@ -850,20 +850,20 @@
                     if (idxDetails == null) {
                         return PlanNode.NO_PLAN;
                     }
-                    jn.setOrigCardinality(idxDetails.getSourceCardinality(), 
false);
+                    jn.setOrigCardinality(idxDetails.getSourceCardinality());
                     jn.setAvgDocSize(idxDetails.getSourceAvgItemSize());
                     jn.setSizeVarsFromDisk(10); // dummy value
                     jn.setSizeVarsAfterScan(10); // dummy value
                 }
                 // multiply by the respective predicate selectivities
-                jn.setCardinality(jn.origCardinality * 
stats.getSelectivity(leafInput, false), false);
+                jn.setCardinality(jn.origCardinality * 
stats.getSelectivity(leafInput, false));
             } else {
                 // could be unnest or assign
                 jn.datasetNames = new 
ArrayList<>(Collections.singleton("unnestOrAssign"));
                 jn.aliases = new 
ArrayList<>(Collections.singleton("unnestOrAssign"));
                 double card = findInListCard(leafInput);
-                jn.setOrigCardinality(card, false);
-                jn.setCardinality(card, false);
+                jn.setOrigCardinality(card);
+                jn.setCardinality(card);
                 // just a guess
                 jn.size = 10;
             }
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
index 9fb0e72..1192796 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/JoinNode.java
@@ -143,9 +143,9 @@
         return cardinality;
     }

-    protected void setCardinality(double card, boolean setMinCard) {
+    protected void setCardinality(double card) {
         // Minimum cardinality for operators is MIN_CARD to prevent bad plans 
due to cardinality under estimation errors.
-        cardinality = setMinCard ? Math.max(card, Cost.MIN_CARD) : card;
+        cardinality = Math.max(card, Cost.MIN_CARD);
     }

     public double getOrigCardinality() {
@@ -156,9 +156,9 @@
         return cheapestPlanNode;
     }

-    protected void setOrigCardinality(double card, boolean setMinCard) {
+    protected void setOrigCardinality(double card) {
         // Minimum cardinality for operators is MIN_CARD to prevent bad plans 
due to cardinality under estimation errors.
-        origCardinality = setMinCard ? Math.max(card, Cost.MIN_CARD) : card;
+        origCardinality = card;
     }

     public void setAvgDocSize(double avgDocSize) {
@@ -364,9 +364,9 @@
         if (getCardinality() == getOrigCardinality()) { // this means there 
was no selectivity hint provided
             // If the sample size is the same as the original dataset (happens 
when the dataset
             // is small), no need to assign any artificial min. cardinality as 
the sample is accurate.
-            setCardinality(finalDatasetCard, scaleUp);
+            setCardinality(finalDatasetCard);
         }
-        setOrigCardinality(origDatasetCard, false);
+        setOrigCardinality(origDatasetCard);

         setSizeVarsFromDisk(sizeVarsFromDisk);
         setSizeVarsAfterScan(sizeVarsAfterScan);

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18423
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Ie04758aca3142669811881fad0cda8750c9e2f9b
Gerrit-Change-Number: 18423
Gerrit-PatchSet: 1
Gerrit-Owner: Vijay Sarathy <[email protected]>
Gerrit-MessageType: newchange

Reply via email to