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]