From 33025e37438065fdf0911a4a854202956d2ac238 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 31 Dec 2024 07:39:10 +0000 Subject: [PATCH] [BugFix] Use a separate thread pool for dictionary collection (backport #54454) (#54512) Signed-off-by: stdpain <34912776+stdpain@users.noreply.github.com> Co-authored-by: stdpain <34912776+stdpain@users.noreply.github.com> --- fe/fe-core/src/main/java/com/starrocks/common/Config.java | 3 +++ .../starrocks/sql/optimizer/statistics/CacheDictManager.java | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/com/starrocks/common/Config.java b/fe/fe-core/src/main/java/com/starrocks/common/Config.java index f03aca3cae109..b52a0da920af0 100644 --- a/fe/fe-core/src/main/java/com/starrocks/common/Config.java +++ b/fe/fe-core/src/main/java/com/starrocks/common/Config.java @@ -1929,6 +1929,9 @@ public class Config extends ConfigBase { @ConfField public static long statistic_dict_columns = 100000; + @ConfField + public static int dict_collect_thread_pool_size = 16; + /** * The column statistic cache update interval */ diff --git a/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/statistics/CacheDictManager.java b/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/statistics/CacheDictManager.java index e1b4c02ae9a16..c67aa0fd515b3 100644 --- a/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/statistics/CacheDictManager.java +++ b/fe/fe-core/src/main/java/com/starrocks/sql/optimizer/statistics/CacheDictManager.java @@ -24,6 +24,7 @@ import com.starrocks.common.Config; import com.starrocks.common.Pair; import com.starrocks.common.Status; +import com.starrocks.common.ThreadPoolManager; import com.starrocks.memory.MemoryTrackable; import com.starrocks.qe.ConnectContext; import com.starrocks.server.GlobalStateMgr; @@ -53,7 +54,7 @@ public class CacheDictManager implements IDictManager, MemoryTrackable { public static final Integer LOW_CARDINALITY_THRESHOLD = 255; - private CacheDictManager() { + public CacheDictManager() { } private static final CacheDictManager INSTANCE = new CacheDictManager(); @@ -106,6 +107,8 @@ public CompletableFuture> asyncReload( private final AsyncLoadingCache> dictStatistics = Caffeine.newBuilder() .maximumSize(Config.statistic_dict_columns) + .executor(ThreadPoolManager.newDaemonCacheThreadPool(Config.dict_collect_thread_pool_size, "cache-dict", + false)) .buildAsync(dictLoader); private Optional deserializeColumnDict(long tableId, String columnName, TStatisticData statisticData) {