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

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


The following commit(s) were added to refs/heads/branch-3.1 by this push:
     new 3ac047fa61d branch-3.1: [opt](point query) optimize point query in 3.1 
(#55324)
3ac047fa61d is described below

commit 3ac047fa61d1034eb0885d9f4fc40511112c1d37
Author: 924060929 <[email protected]>
AuthorDate: Wed Aug 27 11:23:10 2025 +0800

    branch-3.1: [opt](point query) optimize point query in 3.1 (#55324)
    
    ### What problem does this PR solve?
    
    optimize point query in 3.1 because some performance degradation
    
    cherry pick some code from #43546 and #55336
    
    100 columns point query performance: 24000 QPS -> 38000 QPS
---
 .../src/main/java/org/apache/doris/catalog/OlapTable.java   | 12 +++++++++---
 .../main/java/org/apache/doris/planner/OlapScanNode.java    | 13 +++++++++----
 .../src/main/java/org/apache/doris/qe/StmtExecutor.java     |  9 ++++++---
 3 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
index aea516f83aa..d5af8ab4162 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -920,11 +920,17 @@ public class OlapTable extends Table implements 
MTMVRelatedTableIf, GsonPostProc
     }
 
     public List<Column> getSchemaByIndexId(Long indexId, boolean full) {
+        List<Column> fullSchema = indexIdToMeta.get(indexId).getSchema();
         if (full) {
-            return indexIdToMeta.get(indexId).getSchema();
+            return fullSchema;
         } else {
-            return 
indexIdToMeta.get(indexId).getSchema().stream().filter(Column::isVisible)
-                    .collect(Collectors.toList());
+            List<Column> visibleSchema = new ArrayList<>(fullSchema.size());
+            for (Column column : fullSchema) {
+                if (column.isVisible()) {
+                    visibleSchema.add(column);
+                }
+            }
+            return visibleSchema;
         }
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
index fca3647a8d4..cc296cd7219 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
@@ -1174,12 +1174,17 @@ public class OlapScanNode extends ScanNode {
          * The tablet info could be computed only once.
          * So the scanBackendIds should be empty in the beginning.
          */
-        Preconditions.checkState(scanBackendIds.size() == 0);
-        Preconditions.checkState(scanTabletIds.size() == 0);
+        Preconditions.checkState(scanBackendIds.isEmpty());
+        Preconditions.checkState(scanTabletIds.isEmpty());
         Map<Long, Set<Long>> backendAlivePathHashs = Maps.newHashMap();
         for (Backend backend : 
Env.getCurrentSystemInfo().getAllClusterBackendsNoException().values()) {
-            backendAlivePathHashs.put(backend.getId(), 
backend.getDisks().values().stream()
-                    
.filter(DiskInfo::isAlive).map(DiskInfo::getPathHash).collect(Collectors.toSet()));
+            Set<Long> hashSet = Sets.newLinkedHashSet();
+            for (DiskInfo diskInfo : backend.getDisks().values()) {
+                if (diskInfo.isAlive()) {
+                    hashSet.add(diskInfo.getPathHash());
+                }
+            }
+            backendAlivePathHashs.put(backend.getId(), hashSet);
         }
 
         for (Long partitionId : selectedPartitionIds) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
index 2ac7467280e..28a403c8503 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -265,7 +265,7 @@ public class StmtExecutor {
     public static final int MAX_DATA_TO_SEND_FOR_TXN = 100;
     private static Set<String> blockSqlAstNames = Sets.newHashSet();
 
-    private Pattern beIpPattern = Pattern.compile("\\[(\\d+):");
+    private static final Pattern beIpPattern = Pattern.compile("\\[(\\d+):");
     private ConnectContext context;
     private final StatementContext statementContext;
     private MysqlSerializer serializer;
@@ -701,9 +701,12 @@ public class StmtExecutor {
         }
         context.setQueryId(queryId);
         context.setStartTime();
+
         
profile.getSummaryProfile().setQueryBeginTime(TimeUtils.getStartTimeMs());
-        List<List<String>> changedSessionVar = 
VariableMgr.dumpChangedVars(context.getSessionVariable());
-        
profile.setChangedSessionVar(DebugUtil.prettyPrintChangedSessionVar(changedSessionVar));
+        if (context.getSessionVariable().enableProfile) {
+            List<List<String>> changedSessionVar = 
VariableMgr.dumpChangedVars(context.getSessionVariable());
+            
profile.setChangedSessionVar(DebugUtil.prettyPrintChangedSessionVar(changedSessionVar));
+        }
         context.setStmtId(STMT_ID_GENERATOR.incrementAndGet());
 
         parseByNereids();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to