From 9285f3adde1d899c5a7b08ebcae043e97f660a00 Mon Sep 17 00:00:00 2001 From: deardeng Date: Tue, 8 Jul 2025 12:46:16 +0800 Subject: [PATCH] [opt](create table) Fixed table creation becomes slower as the number of tablets increases (#52688) image --- .../apache/doris/catalog/TabletInvertedIndex.java | 14 ++++++++++++++ .../org/apache/doris/system/SystemInfoService.java | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java index 796ce457fc6bf7..86a52eb60333ba 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/TabletInvertedIndex.java @@ -703,6 +703,20 @@ public List getReplicasByTabletId(long tabletId) { } } + public Long getTabletSizeByBackendId(long backendId) { + Long ret = 0L; + long stamp = readLock(); + try { + Map replicaMetaWithBackend = backingReplicaMetaTable.row(backendId); + if (replicaMetaWithBackend != null) { + ret += replicaMetaWithBackend.size(); + } + } finally { + readUnlock(stamp); + } + return ret; + } + public List getTabletIdsByBackendId(long backendId) { List tabletIds = Lists.newArrayList(); long stamp = readLock(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java b/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java index 662455c87dfbab..3ed9e4b8ed4b39 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java +++ b/fe/fe-core/src/main/java/org/apache/doris/system/SystemInfoService.java @@ -464,7 +464,7 @@ public int getStartPosOfRoundRobin(Tag tag, TStorageMedium storageMedium, boolea long minBeTabletsNum = Long.MAX_VALUE; int minIndex = -1; for (int i = 0; i < beIds.size(); ++i) { - long tabletsNum = Env.getCurrentInvertedIndex().getTabletIdsByBackendId(beIds.get(i)).size(); + long tabletsNum = Env.getCurrentInvertedIndex().getTabletSizeByBackendId(beIds.get(i)); if (tabletsNum < minBeTabletsNum) { minBeTabletsNum = tabletsNum; minIndex = i;