Skip to content

Commit

Permalink
modify cbo statistics in filter and scan
Browse files Browse the repository at this point in the history
  • Loading branch information
yx-keith committed May 22, 2024
1 parent bb407ee commit 487524a
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package org.apache.doris.nereids.stats;

import org.apache.doris.analysis.LiteralExpr;
import org.apache.doris.nereids.CascadesContext;
import org.apache.doris.nereids.stats.FilterEstimation.EstimationContext;
import org.apache.doris.nereids.trees.TreeNode;
import org.apache.doris.nereids.trees.expressions.And;
Expand Down Expand Up @@ -92,6 +93,20 @@ public Statistics estimate(Expression expression, Statistics statistics) {
return stats;
}

/**
* This method will update the stats according to the selectivity.
*/
public Statistics estimate(Expression expression, Statistics statistics, CascadesContext context) {
// For a comparison predicate, only when it's left side is a slot and right side is a literal, we would
// consider is a valid predicate.
Statistics stats = expression.accept(this, new EstimationContext(statistics));
if (context.getConnectContext().getSessionVariable().enableModifyCboStatistics && stats.getRowCount() <= 0) {
stats = new StatisticsBuilder(stats).setRowCount(1).build();
}
stats.enforceValid();
return stats;
}

@Override
public Statistics visit(Expression expr, EstimationContext context) {
return context.statistics.withSel(DEFAULT_INEQUALITY_COEFFICIENT);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,7 @@ private Statistics computeFilter(Filter filter) {
.map(NamedExpression::toSlot).collect(Collectors.toSet());
Expression predicate = filter.getPredicate();
if (predicate.anyMatch(s -> slots.contains(s))) {
return new FilterEstimation(slots).estimate(filter.getPredicate(), stats);
return new FilterEstimation(slots).estimate(filter.getPredicate(), stats, this.cascadesContext);
}
} else if (plan instanceof LogicalJoin && filter instanceof LogicalFilter
&& filter.getConjuncts().stream().anyMatch(e -> e instanceof IsNull)) {
Expand All @@ -636,8 +636,7 @@ private Statistics computeFilter(Filter filter) {
}
}
}

return new FilterEstimation(isOnBaseTable).estimate(filter.getPredicate(), stats);
return new FilterEstimation().estimate(filter.getPredicate(), stats, this.cascadesContext);
}

private Statistics computeGeneratedIsNullStats(LogicalJoin join, Filter filter) {
Expand Down Expand Up @@ -771,6 +770,9 @@ private Statistics computeCatalogRelation(CatalogRelation catalogRelation) {
TableStatsMeta tableMeta = analysisManager.findTableStatsStatus(table.getId());
long tableUpdatedRows = tableMeta == null ? 0 : tableMeta.updatedRows.get();
double rowCount = catalogRelation.getTable().getRowCountForNereids();
if (this.cascadesContext.getConnectContext().getSessionVariable().enableModifyCboStatistics && rowCount <= 0) {
rowCount = 1.0;
}
boolean hasUnknownKeyCol = false;
long idxId = -1;
if (catalogRelation instanceof OlapScan) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,8 @@ public class SessionVariable implements Serializable, Writable {

public static final String ENABLE_CBO_STATISTICS = "enable_cbo_statistics";

public static final String ENABLE_MODIFY_CBO_STATISTICS = "enable_modify_cbo_statistics";

public static final String ENABLE_SAVE_STATISTICS_SYNC_JOB = "enable_save_statistics_sync_job";

public static final String ENABLE_ELIMINATE_SORT_NODE = "enable_eliminate_sort_node";
Expand Down Expand Up @@ -1316,6 +1318,9 @@ public void setEnableLeftZigZag(boolean enableLeftZigZag) {
@VariableMgr.VarAttr(name = ENABLE_CBO_STATISTICS)
public boolean enableCboStatistics = false;

@VariableMgr.VarAttr(name = ENABLE_MODIFY_CBO_STATISTICS, needForward = true)
public boolean enableModifyCboStatistics = true;

@VariableMgr.VarAttr(name = ENABLE_ELIMINATE_SORT_NODE)
public boolean enableEliminateSortNode = true;

Expand Down

0 comments on commit 487524a

Please sign in to comment.