This is an automated email from the ASF dual-hosted git repository.

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 61f33243d5 [improvement](nereids) Add logs and config options (#22580)
61f33243d5 is described below

commit 61f33243d59fae228862da387e950f3d81770e08
Author: AKIRA <33112463+kikyou1...@users.noreply.github.com>
AuthorDate: Thu Aug 3 23:23:52 2023 +0800

    [improvement](nereids) Add logs and config options (#22580)
---
 .../org/apache/doris/analysis/ShowAnalyzeStmt.java |  2 +-
 .../doris/nereids/stats/StatsCalculator.java       | 24 +++++++++++++---------
 .../java/org/apache/doris/qe/SessionVariable.java  |  5 +++++
 .../apache/doris/statistics/BaseAnalysisTask.java  |  2 ++
 .../apache/doris/statistics/OlapAnalysisTask.java  | 10 ++++-----
 .../apache/doris/statistics/StatisticsCache.java   |  4 +---
 .../doris/statistics/util/StatisticsUtil.java      |  7 +++++++
 .../nereids/jobs/cascades/DeriveStatsJobTest.java  |  6 +++++-
 .../doris/nereids/stats/StatsCalculatorTest.java   |  9 ++++++--
 9 files changed, 47 insertions(+), 22 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowAnalyzeStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowAnalyzeStmt.java
index 3a0aa05a7d..95035641a7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowAnalyzeStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ShowAnalyzeStmt.java
@@ -244,7 +244,7 @@ public class ShowAnalyzeStmt extends ShowStmt {
 
         if (!valid) {
             throw new AnalysisException("Where clause should looks like: "
-                    + "STATE = 
\"PENDING|SCHEDULING|RUNNING|FINISHED|FAILED|CANCELLED\"");
+                    + "STATE = \"PENDING|RUNNING|FINISHED|FAILED");
         }
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
index 472e430693..832914360b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/stats/StatsCalculator.java
@@ -562,13 +562,14 @@ public class StatsCalculator extends 
DefaultPlanVisitor<Statistics, Void> {
     }
 
     private Histogram getColumnHistogram(TableIf table, String colName) {
-        if (totalHistogramMap.get(table.getName() + colName) != null) {
-            return totalHistogramMap.get(table.getName() + colName);
-        } else if (isPlayNereidsDump) {
-            return null;
-        } else {
-            return 
Env.getCurrentEnv().getStatisticsCache().getHistogram(table.getId(), colName);
-        }
+        // if (totalHistogramMap.get(table.getName() + colName) != null) {
+        //     return totalHistogramMap.get(table.getName() + colName);
+        // } else if (isPlayNereidsDump) {
+        //     return null;
+        // } else {
+        //     return 
Env.getCurrentEnv().getStatisticsCache().getHistogram(table.getId(), colName);
+        // }
+        return null;
     }
 
     // TODO: 1. Subtract the pruned partition
@@ -582,18 +583,21 @@ public class StatsCalculator extends 
DefaultPlanVisitor<Statistics, Void> {
         double rowCount = catalogRelation.getTable().estimatedRowCount();
         for (SlotReference slotReference : slotSet) {
             String colName = slotReference.getName();
+            boolean shouldIgnoreThisCol = shouldIgnoreCol(table, 
slotReference.getColumn().get());
+
             if (colName == null) {
                 throw new RuntimeException(String.format("Invalid slot: %s", 
slotReference.getExprId()));
             }
             ColumnStatistic cache = Config.enable_stats && 
FeConstants.enableInternalSchemaDb
-                    ? getColumnStatistic(table, colName) : 
ColumnStatistic.UNKNOWN;
+                    ? shouldIgnoreThisCol
+                        ? ColumnStatistic.UNKNOWN : getColumnStatistic(table, 
colName) : ColumnStatistic.UNKNOWN;
             if (cache.avgSizeByte <= 0) {
                 cache = new ColumnStatisticBuilder(cache)
                         
.setAvgSizeByte(slotReference.getColumn().get().getType().getSlotSize())
                         .build();
             }
             if (cache.isUnKnown) {
-                if (forbidUnknownColStats && 
!ignoreUnknownColStatsCheck(table, slotReference.getColumn().get())) {
+                if (forbidUnknownColStats && !shouldIgnoreThisCol) {
                     if (StatisticsUtil.statsTblAvailable()) {
                         throw new AnalysisException(String.format("Found 
unknown stats for column:%s.%s.\n"
                                 + "It may caused by:\n"
@@ -1064,7 +1068,7 @@ public class StatsCalculator extends 
DefaultPlanVisitor<Statistics, Void> {
         return groupExpression.childStatistics(1);
     }
 
-    private boolean ignoreUnknownColStatsCheck(TableIf tableIf, Column c) {
+    private boolean shouldIgnoreCol(TableIf tableIf, Column c) {
         if (tableIf instanceof SchemaTable) {
             return true;
         }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index d10e4a81a6..12f8dc1bc8 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -359,6 +359,8 @@ public class SessionVariable implements Serializable, 
Writable {
 
     public static final String ENABLE_STRONG_CONSISTENCY = 
"enable_strong_consistency_read";
 
+    public static final String PARALLEL_SYNC_ANALYZE_TASK_NUM = 
"parallel_sync_analyze_task_num";
+
     public static final String CBO_CPU_WEIGHT = "cbo_cpu_weight";
 
     public static final String CBO_MEM_WEIGHT = "cbo_mem_weight";
@@ -1014,6 +1016,9 @@ public class SessionVariable implements Serializable, 
Writable {
     })
     public boolean enableStrongConsistencyRead = false;
 
+    @VariableMgr.VarAttr(name = PARALLEL_SYNC_ANALYZE_TASK_NUM)
+    public int parallelSyncAnalyzeTaskNum = 2;
+
     // If this fe is in fuzzy mode, then will use initFuzzyModeVariables to 
generate some variables,
     // not the default value set in the code.
     public void initFuzzyModeVariables() {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseAnalysisTask.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseAnalysisTask.java
index 9c15c49c38..835691fdc5 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseAnalysisTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseAnalysisTask.java
@@ -35,6 +35,7 @@ import org.apache.logging.log4j.Logger;
 
 import java.util.HashSet;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 
 public abstract class BaseAnalysisTask {
 
@@ -174,6 +175,7 @@ public abstract class BaseAnalysisTask {
                 if (retriedTimes > 
StatisticConstants.ANALYZE_TASK_RETRY_TIMES) {
                     throw new RuntimeException(t);
                 }
+                StatisticsUtil.sleep(TimeUnit.SECONDS.toMillis(2 ^ 
retriedTimes) * 10);
             }
         }
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
index 9fb04f9394..04aab26831 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
@@ -50,11 +50,6 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
             + "     (SELECT NDV(`${colName}`) AS ndv "
             + "     FROM `${dbName}`.`${tblName}` ${sampleExpr}) t2\n";
 
-    @VisibleForTesting
-    public OlapAnalysisTask() {
-        super();
-    }
-
     public OlapAnalysisTask(AnalysisInfo info) {
         super(info);
     }
@@ -113,6 +108,8 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
         if (killed) {
             return;
         }
+        long startTime = System.currentTimeMillis();
+        LOG.info("ANALYZE SQL : " + sql + " start at " + startTime);
         try (AutoCloseConnectContext r = StatisticsUtil.buildConnectContext()) 
{
             r.connectContext.getSessionVariable().disableNereidsPlannerOnce();
             stmtExecutor = new StmtExecutor(r.connectContext, sql);
@@ -123,6 +120,9 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
                 throw new RuntimeException(String.format("Failed to analyze 
%s.%s.%s, error: %s sql: %s",
                         info.catalogName, info.dbName, info.colName, sql, 
queryState.getErrorMessage()));
             }
+        } finally {
+            LOG.info("Analyze SQL: " + sql + " cost time: " + 
(System.currentTimeMillis() - startTime) + "ms");
         }
     }
+
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCache.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCache.java
index 1149ecdd5a..33375a9c25 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCache.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsCache.java
@@ -64,7 +64,6 @@ public class StatisticsCache {
     private final AsyncLoadingCache<StatisticsCacheKey, 
Optional<ColumnStatistic>> columnStatisticsCache =
             Caffeine.newBuilder()
                     .maximumSize(Config.stats_cache_size)
-                    
.expireAfterAccess(Duration.ofHours(StatisticConstants.STATISTICS_CACHE_VALID_DURATION_IN_HOURS))
                     
.refreshAfterWrite(Duration.ofHours(StatisticConstants.STATISTICS_CACHE_REFRESH_INTERVAL))
                     .executor(threadPool)
                     .buildAsync(columnStatisticsCacheLoader);
@@ -72,7 +71,6 @@ public class StatisticsCache {
     private final AsyncLoadingCache<StatisticsCacheKey, Optional<Histogram>> 
histogramCache =
             Caffeine.newBuilder()
                     .maximumSize(Config.stats_cache_size)
-                    
.expireAfterAccess(Duration.ofHours(StatisticConstants.STATISTICS_CACHE_VALID_DURATION_IN_HOURS))
                     
.refreshAfterWrite(Duration.ofHours(StatisticConstants.STATISTICS_CACHE_REFRESH_INTERVAL))
                     .executor(threadPool)
                     .buildAsync(histogramCacheLoader);
@@ -80,7 +78,7 @@ public class StatisticsCache {
     private final AsyncLoadingCache<StatisticsCacheKey, 
Optional<TableStatistic>> tableStatisticsCache =
             Caffeine.newBuilder()
                     .maximumSize(Config.stats_cache_size)
-                    
.expireAfterWrite(Duration.ofHours(StatisticConstants.ROW_COUNT_CACHE_VALID_DURATION_IN_HOURS))
+                    
.refreshAfterWrite(Duration.ofHours(StatisticConstants.STATISTICS_CACHE_REFRESH_INTERVAL))
                     .executor(threadPool)
                     .buildAsync(tableStatisticsCacheLoader);
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
index 61551b4f20..b2e4baecee 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
@@ -664,4 +664,11 @@ public class StatisticsUtil {
                 || type instanceof VariantType;
     }
 
+    public static void sleep(long millis) {
+        try {
+            Thread.sleep(millis);
+        } catch (InterruptedException ignore) {
+            // IGNORE
+        }
+    }
 }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/cascades/DeriveStatsJobTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/cascades/DeriveStatsJobTest.java
index c6c60c815b..fd60eb2e00 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/cascades/DeriveStatsJobTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/jobs/cascades/DeriveStatsJobTest.java
@@ -17,11 +17,14 @@
 
 package org.apache.doris.nereids.jobs.cascades;
 
+import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.OlapTable;
+import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.nereids.CascadesContext;
 import org.apache.doris.nereids.jobs.JobContext;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.Alias;
+import org.apache.doris.nereids.trees.expressions.ExprId;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.SlotReference;
 import org.apache.doris.nereids.trees.expressions.StatementScopeIdGenerator;
@@ -74,7 +77,8 @@ public class DeriveStatsJobTest {
         long tableId1 = 0;
 
         List<String> qualifier = ImmutableList.of("test", "t");
-        slot1 = new SlotReference("c1", IntegerType.INSTANCE, true, qualifier);
+        slot1 = new SlotReference(new ExprId(1), "c1", IntegerType.INSTANCE, 
true, qualifier,
+                    new Column("e", PrimitiveType.INT));
         new Expectations() {{
                 ConnectContext.get();
                 result = context;
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/StatsCalculatorTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/StatsCalculatorTest.java
index 4ca19dedf7..0fa8a17863 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/StatsCalculatorTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/stats/StatsCalculatorTest.java
@@ -17,12 +17,15 @@
 
 package org.apache.doris.nereids.stats;
 
+import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.OlapTable;
+import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.nereids.memo.Group;
 import org.apache.doris.nereids.memo.GroupExpression;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.trees.expressions.And;
 import org.apache.doris.nereids.trees.expressions.EqualTo;
+import org.apache.doris.nereids.trees.expressions.ExprId;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.Or;
 import org.apache.doris.nereids.trees.expressions.SlotReference;
@@ -249,7 +252,8 @@ public class StatsCalculatorTest {
     public void testOlapScan(@Mocked ConnectContext context) {
         long tableId1 = 0;
         List<String> qualifier = ImmutableList.of("test", "t");
-        SlotReference slot1 = new SlotReference("c1", IntegerType.INSTANCE, 
true, qualifier);
+        SlotReference slot1 = new SlotReference(new ExprId(0),
+                "c1", IntegerType.INSTANCE, true, qualifier, new Column("c1", 
PrimitiveType.INT));
 
         OlapTable table1 = PlanConstructor.newOlapTable(tableId1, "t1", 0);
         LogicalOlapScan logicalOlapScan1 = (LogicalOlapScan) new 
LogicalOlapScan(StatementScopeIdGenerator.newRelationId(), table1,
@@ -270,7 +274,8 @@ public class StatsCalculatorTest {
         List<String> qualifier = new ArrayList<>();
         qualifier.add("test");
         qualifier.add("t");
-        SlotReference slot1 = new SlotReference("c1", IntegerType.INSTANCE, 
true, qualifier);
+        SlotReference slot1 = new SlotReference(new ExprId(0),
+                "c1", IntegerType.INSTANCE, true, qualifier, new Column("c1", 
PrimitiveType.INT));
         ColumnStatisticBuilder columnStat1 = new ColumnStatisticBuilder();
         columnStat1.setNdv(10);
         columnStat1.setNumNulls(5);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to