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 5ea6492f1ec230..eaf9a6c783801b 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 @@ -94,14 +94,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 9391e5c76d23d1..cfbdbdfd436b99 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 @@ -712,6 +712,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"; + public static final String SQL_CONVERTOR_CONFIG = "sql_convertor_config"; /** @@ -2431,6 +2433,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; + @VariableMgr.VarAttr(name = SQL_CONVERTOR_CONFIG, needForward = true, description = { "SQL 转换器的相关配置,使用 Json 格式。以 {} 为根元素。",