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 fdb827a52ca8e3..b518787fe7c3a9 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"; + public static final String SHOW_COLUMN_COMMENT_IN_DESCRIBE = "show_column_comment_in_describe"; public static final String SQL_CONVERTOR_CONFIG = "sql_convertor_config"; @@ -2600,6 +2602,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 = SHOW_COLUMN_COMMENT_IN_DESCRIBE, needForward = true, description = { "是否在 DESCRIBE TABLE 语句中显示列注释",