From 632b891b2bb989086c2f05c3052b871211758d51 Mon Sep 17 00:00:00 2001 From: laihui Date: Tue, 27 May 2025 12:08:02 +0800 Subject: [PATCH] accelerate query information_schema.tables from follower node in cloud mode --- .../apache/doris/planner/SchemaScanNode.java | 20 +++++++++++++++---- .../org/apache/doris/qe/SessionVariable.java | 12 +++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/SchemaScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/SchemaScanNode.java index 08a98fddbecc10..b58b95e91e2131 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/SchemaScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/SchemaScanNode.java @@ -96,14 +96,26 @@ public void finalize(Analyzer analyzer) throws UserException { schemaCatalog = analyzer.getSchemaCatalog(); schemaDb = analyzer.getSchemaDb(); schemaTable = analyzer.getSchemaTable(); - frontendIP = FrontendOptions.getLocalHostAddress(); - frontendPort = Config.rpc_port; + if (ConnectContext.get().getSessionVariable().enableSchemaScanFromMasterFe + && tableName.equalsIgnoreCase("tables")) { + frontendIP = Env.getCurrentEnv().getMasterHost(); + frontendPort = Env.getCurrentEnv().getMasterRpcPort(); + } else { + frontendIP = FrontendOptions.getLocalHostAddress(); + frontendPort = Config.rpc_port; + } } @Override public void finalizeForNereids() throws UserException { - frontendIP = FrontendOptions.getLocalHostAddress(); - frontendPort = Config.rpc_port; + if (ConnectContext.get().getSessionVariable().enableSchemaScanFromMasterFe + && tableName.equalsIgnoreCase("tables")) { + frontendIP = Env.getCurrentEnv().getMasterHost(); + frontendPort = Env.getCurrentEnv().getMasterRpcPort(); + } else { + frontendIP = FrontendOptions.getLocalHostAddress(); + frontendPort = Config.rpc_port; + } } private void setFeAddrList(TPlanNode msg) { 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 ca92b9dada1dbf..c1d57f6cdbce4f 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 @@ -737,6 +737,8 @@ public class SessionVariable implements Serializable, Writable { public static final String ENABLE_SQL_CONVERTOR_FEATURES = "enable_sql_convertor_features"; + public static final String ENABLE_SCHEMA_SCAN_FROM_MASTER_FE = "enable_schema_scan_from_master_fe"; + /** * If set false, user couldn't submit analyze SQL and FE won't allocate any related resources. */ @@ -2594,6 +2596,16 @@ public void setDetailShapePlanNodes(String detailShapePlanNodes) { }) public String enableSqlConvertorFeatures = ""; + // The default value is true, + // which throughs reducing rpc call from follower node to meta service to improve query performance + // for getting version is memory operation in master node, + // but it will slightly increase the pressure on the FE master. + @VariableMgr.VarAttr(name = ENABLE_SCHEMA_SCAN_FROM_MASTER_FE, description = { + "在follower节点查询时, 是否允许从master节点扫描information_schema.tables的结果", + "Whether to allow scanning information_schema.tables from the master node" + }) + public boolean enableSchemaScanFromMasterFe = true; + public void setEnableEsParallelScroll(boolean enableESParallelScroll) { this.enableESParallelScroll = enableESParallelScroll; }