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

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


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new 368d0a70d37 branch-4.0: [opt](systable) Improve 
information_schema.partitions getVisibleVersion latency under cloud mode 
(#58515) (#61239)
368d0a70d37 is described below

commit 368d0a70d372fbc1e0756d7ec4caf376bc922c31
Author: Gavin Chou <[email protected]>
AuthorDate: Mon Mar 16 12:38:39 2026 +0800

    branch-4.0: [opt](systable) Improve information_schema.partitions 
getVisibleVersion latency under cloud mode (#58515) (#61239)
    
    pick #58515
    
    Co-authored-by: koarz <[email protected]>
---
 .../exec/schema_scanner/schema_partitions_scanner.cpp |  3 +++
 .../java/org/apache/doris/qe/SessionVariable.java     | 13 +++++++++++++
 .../apache/doris/tablefunction/MetadataGenerator.java | 19 +++++++++++++++----
 gensrc/thrift/FrontendService.thrift                  |  1 +
 4 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/be/src/exec/schema_scanner/schema_partitions_scanner.cpp 
b/be/src/exec/schema_scanner/schema_partitions_scanner.cpp
index 5d091c15769..b2803ac8c98 100644
--- a/be/src/exec/schema_scanner/schema_partitions_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_partitions_scanner.cpp
@@ -126,6 +126,9 @@ Status 
SchemaPartitionsScanner::get_onedb_info_from_fe(int64_t dbId) {
     
schema_table_request_params.__set_current_user_ident(*_param->common_param->current_user_ident);
     schema_table_request_params.__set_catalog(*_param->common_param->catalog);
     schema_table_request_params.__set_dbId(dbId);
+    if (_param->common_param->thread_id > 0) {
+        
schema_table_request_params.__set_thread_id(_param->common_param->thread_id);
+    }
     schema_table_request_params.__set_time_zone(_timezone);
 
     TFetchSchemaTableDataRequest request;
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 34d1fce5a70..2ed29348179 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
@@ -753,6 +753,9 @@ public class SessionVariable implements Serializable, 
Writable {
 
     public static final String SHORT_CIRCUIT_EVALUATION = 
"short_circuit_evaluation";
 
+    public static final String 
CLOUD_PARTITIONS_TABLE_USE_CACHED_VISIBLE_VERSION =
+            "cloud_partitions_table_use_cached_visible_version";
+
     // NOTE: if you want to add some debug variables, please disable sql cache 
in `CacheAnalyzer.commonCacheCondition`,
     //       and set affectQueryResult=true
     public static final List<String> DEBUG_VARIABLES = ImmutableList.of(
@@ -3258,6 +3261,12 @@ public class SessionVariable implements Serializable, 
Writable {
     )
     public int defaultVariantSparseHashShardCount = 0;
 
+    @VariableMgr.VarAttr(name = 
CLOUD_PARTITIONS_TABLE_USE_CACHED_VISIBLE_VERSION, needForward = false,
+            description = {"partitions系统表的visible_version列在cloud模式是否使用cached",
+                    "Whether cache is used for the visible_version column"
+                             + "in the partitions system table on cloud mode"})
+    public boolean cloudPartitionsTableUseCachedVisibleVersion = true;
+
     @VariableMgr.VarAttr(
             name = "use_v3_storage_format",
             fuzzy = true,
@@ -5924,6 +5933,10 @@ public class SessionVariable implements Serializable, 
Writable {
         return defaultVariantSparseHashShardCount;
     }
 
+    public boolean getCloudPartitionsTableUseCachedVisibleVersion() {
+        return cloudPartitionsTableUseCachedVisibleVersion;
+    }
+
     public void readAffectQueryResultVariables(BiConsumer<String, Object> 
variablesReader) {
         for (Field affectQueryResultField : affectQueryResultFields) {
             String name = affectQueryResultField.getName();
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java
 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java
index 21b97d0fd08..62e9768d614 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/MetadataGenerator.java
@@ -87,6 +87,7 @@ import org.apache.doris.qe.QeProcessorImpl;
 import org.apache.doris.qe.QeProcessorImpl.QueryInfo;
 import org.apache.doris.qe.VariableMgr;
 import org.apache.doris.resource.workloadgroup.WorkloadGroupMgr;
+import org.apache.doris.service.ExecuteEnv;
 import org.apache.doris.system.Backend;
 import org.apache.doris.system.SystemInfoService;
 import org.apache.doris.thrift.FrontendService;
@@ -1575,8 +1576,8 @@ public class MetadataGenerator {
         return result;
     }
 
-    private static void partitionsForInternalCatalog(UserIdentity 
currentUserIdentity,
-            CatalogIf catalog, DatabaseIf database, List<TableIf> tables, 
List<TRow> dataBatch, String timeZone) {
+    private static void partitionsForInternalCatalog(UserIdentity 
currentUserIdentity, CatalogIf catalog,
+            DatabaseIf database, List<TableIf> tables, List<TRow> dataBatch, 
String timeZone, Long threadId) {
         for (TableIf table : tables) {
             if (!(table instanceof OlapTable)) {
                 continue;
@@ -1663,7 +1664,16 @@ public class MetadataGenerator {
                     trow.addToColumnValue(new 
TCell().setIntVal(partition.getDistributionInfo()
                             .getBucketNum())); // BUCKET_NUM
                     trow.addToColumnValue(new 
TCell().setLongVal(partition.getCommittedVersion())); // COMMITTED_VERSION
-                    trow.addToColumnValue(new 
TCell().setLongVal(partition.getVisibleVersion())); // VISIBLE_VERSION
+                    ConnectContext ctx =
+                            
ExecuteEnv.getInstance().getScheduler().getContext(threadId.intValue());
+                    boolean useCachedVisibleVersion = ctx != null
+                            && 
ctx.getSessionVariable().getCloudPartitionsTableUseCachedVisibleVersion();
+                    if (useCachedVisibleVersion) {
+                        trow.addToColumnValue(
+                                new 
TCell().setLongVal(partition.getCachedVisibleVersion())); // VISIBLE_VERSION
+                    } else {
+                        trow.addToColumnValue(new 
TCell().setLongVal(partition.getVisibleVersion())); // VISIBLE_VERSION
+                    }
                     if (partitionInfo.getType() == PartitionType.RANGE
                             || partitionInfo.getType() == PartitionType.LIST) {
                         List<Column> partitionColumns = 
partitionInfo.getPartitionColumns();
@@ -1736,6 +1746,7 @@ public class MetadataGenerator {
         TFetchSchemaTableDataResult result = new TFetchSchemaTableDataResult();
         Long dbId = params.getDbId();
         String clg = params.getCatalog();
+        Long threadId = params.getThreadId();
         List<TRow> dataBatch = Lists.newArrayList();
         CatalogIf catalog = 
Env.getCurrentEnv().getCatalogMgr().getCatalog(clg);
         if (catalog == null) {
@@ -1758,7 +1769,7 @@ public class MetadataGenerator {
         List<TableIf> tables = database.getTables();
         if (catalog instanceof InternalCatalog) {
             // only olap tables
-            partitionsForInternalCatalog(currentUserIdentity, catalog, 
database, tables, dataBatch, timezone);
+            partitionsForInternalCatalog(currentUserIdentity, catalog, 
database, tables, dataBatch, timezone, threadId);
         } else if (catalog instanceof ExternalCatalog) {
             partitionsForExternalCatalog(currentUserIdentity, catalog, 
database, tables, dataBatch, timezone);
         }
diff --git a/gensrc/thrift/FrontendService.thrift 
b/gensrc/thrift/FrontendService.thrift
index fed7476a9c0..73bf949c3b4 100644
--- a/gensrc/thrift/FrontendService.thrift
+++ b/gensrc/thrift/FrontendService.thrift
@@ -888,6 +888,7 @@ struct TSchemaTableRequestParams {
     5: optional i64 dbId         // used for table specific queries
     6: optional string time_zone // used for DATETIME field
     7: optional string frontend_conjuncts
+    8: optional i64 thread_id // mysql connection id for fetching 
ConnectContext if needed
 }
 
 struct TFetchSchemaTableDataRequest {


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

Reply via email to