[refactor](Nereids): avoid ConnectContext.get() ASAP to improve proformance (#29952)

This commit is contained in:
jakevin
2024-01-15 10:00:47 +08:00
committed by yiguolei
parent 54d23e0f8e
commit b47e289560
15 changed files with 53 additions and 44 deletions

View File

@ -75,7 +75,7 @@ class CostModelV1 extends PlanVisitor<Cost, PlanContext> {
beNumber = sessionVariable.getBeNumberForTest();
parallelInstance = 8;
} else {
beNumber = Math.max(1, ConnectContext.get().getEnv().getClusterInfo().getBackendsNumber(true));
beNumber = Math.max(1, connectContext.getEnv().getClusterInfo().getBackendsNumber(true));
parallelInstance = Math.max(1, connectContext.getSessionVariable().getParallelExecInstanceNum());
}
}

View File

@ -179,12 +179,12 @@ import org.apache.doris.planner.external.iceberg.IcebergScanNode;
import org.apache.doris.planner.external.jdbc.JdbcScanNode;
import org.apache.doris.planner.external.odbc.OdbcScanNode;
import org.apache.doris.planner.external.paimon.PaimonScanNode;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.statistics.StatisticConstants;
import org.apache.doris.tablefunction.TableValuedFunctionIf;
import org.apache.doris.thrift.TFetchOption;
import org.apache.doris.thrift.TPartitionType;
import org.apache.doris.thrift.TPushAggOp;
import org.apache.doris.thrift.TResultSinkType;
import org.apache.doris.thrift.TRuntimeFilterType;
import com.google.common.base.Preconditions;
@ -363,8 +363,9 @@ public class PhysicalPlanTranslator extends DefaultPlanVisitor<PlanFragment, Pla
public PlanFragment visitPhysicalResultSink(PhysicalResultSink<? extends Plan> physicalResultSink,
PlanTranslatorContext context) {
PlanFragment planFragment = physicalResultSink.child().accept(this, context);
planFragment.setSink(new ResultSink(planFragment.getPlanRoot().getId(),
ConnectContext.get().getResultSinkType()));
TResultSinkType resultSinkType = context.getConnectContext() != null ? context.getConnectContext()
.getResultSinkType() : null;
planFragment.setSink(new ResultSink(planFragment.getPlanRoot().getId(), resultSinkType));
return planFragment;
}

View File

@ -151,6 +151,10 @@ public class PlanTranslatorContext {
return connectContext == null ? null : connectContext.getSessionVariable();
}
public ConnectContext getConnectContext() {
return connectContext;
}
public Set<ScanNode> getScanNodeWithUnknownColumnStats() {
return statsUnknownColumnsMap.keySet();
}

View File

@ -33,6 +33,7 @@ import org.apache.doris.nereids.rules.Rule;
import org.apache.doris.nereids.rules.RuleSet;
import org.apache.doris.nereids.trees.expressions.CTEId;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.SessionVariable;
import org.apache.doris.statistics.Statistics;
@ -84,6 +85,10 @@ public abstract class Job implements TracerSupplier {
return once;
}
public ConnectContext getConnectContext() {
return context.getCascadesContext().getConnectContext();
}
public abstract void execute();
public EventProducer getEventTracer() {

View File

@ -31,7 +31,6 @@ import org.apache.doris.nereids.properties.ChildrenPropertiesRegulator;
import org.apache.doris.nereids.properties.EnforceMissingPropertiesHelper;
import org.apache.doris.nereids.properties.PhysicalProperties;
import org.apache.doris.nereids.properties.RequestPropertyDeriver;
import org.apache.doris.qe.ConnectContext;
import org.apache.doris.qe.SessionVariable;
import com.google.common.collect.Lists;
@ -81,10 +80,6 @@ public class CostAndEnforcerJob extends Job implements Cloneable {
this.groupExpression = groupExpression;
}
private ConnectContext getConnectContext() {
return context.getCascadesContext().getConnectContext();
}
private SessionVariable getSessionVariable() {
return context.getCascadesContext().getConnectContext().getSessionVariable();
}

View File

@ -35,9 +35,10 @@ public abstract class Event implements Cloneable {
}
protected static boolean checkConnectContext(Class<? extends Event> targetClass) {
return ConnectContext.get() != null
&& ConnectContext.get().getSessionVariable().isEnableNereidsTrace()
&& ConnectContext.get().getSessionVariable().getParsedNereidsEventMode().contains(targetClass);
ConnectContext connectContext = ConnectContext.get();
return connectContext != null
&& connectContext.getSessionVariable().isEnableNereidsTrace()
&& connectContext.getSessionVariable().getParsedNereidsEventMode().contains(targetClass);
}
public final String toJson() {

View File

@ -290,14 +290,14 @@ public class MinidumpUtils {
* serialize output plan to dump file and persistent into disk
*/
public static void serializeOutputToDumpFile(Plan resultPlan) {
if (ConnectContext.get().getSessionVariable().isPlayNereidsDump()
|| !ConnectContext.get().getSessionVariable().isEnableMinidump()) {
ConnectContext connectContext = ConnectContext.get();
if (connectContext.getSessionVariable().isPlayNereidsDump()
|| !connectContext.getSessionVariable().isEnableMinidump()) {
return;
}
ConnectContext.get().getMinidump().put("ResultPlan", ((AbstractPlan) resultPlan).toJson());
if (ConnectContext.get().getSessionVariable().isEnableMinidump()) {
saveMinidumpString(ConnectContext.get().getMinidump(),
DebugUtil.printId(ConnectContext.get().queryId()));
connectContext.getMinidump().put("ResultPlan", ((AbstractPlan) resultPlan).toJson());
if (connectContext.getSessionVariable().isEnableMinidump()) {
saveMinidumpString(connectContext.getMinidump(), DebugUtil.printId(connectContext.queryId()));
}
}
@ -433,15 +433,16 @@ public class MinidumpUtils {
* implementation of interface serializeInputsToDumpFile
*/
private static JSONObject serializeInputs(Plan parsedPlan, List<TableIf> tables) throws IOException {
ConnectContext connectContext = ConnectContext.get();
// Create a JSON object
JSONObject jsonObj = new JSONObject();
jsonObj.put("Sql", ConnectContext.get().getStatementContext().getOriginStatement().originStmt);
jsonObj.put("Sql", connectContext.getStatementContext().getOriginStatement().originStmt);
// add session variable
int beNumber = ConnectContext.get().getEnv().getClusterInfo().getBackendsNumber(true);
ConnectContext.get().getSessionVariable().setBeNumberForTest(beNumber);
jsonObj.put("SessionVariable", serializeChangedSessionVariable(ConnectContext.get().getSessionVariable()));
int beNumber = connectContext.getEnv().getClusterInfo().getBackendsNumber(true);
connectContext.getSessionVariable().setBeNumberForTest(beNumber);
jsonObj.put("SessionVariable", serializeChangedSessionVariable(connectContext.getSessionVariable()));
// add tables
jsonObj.put("DbName", ConnectContext.get().getDatabase());
jsonObj.put("DbName", connectContext.getDatabase());
JSONArray tablesJson = serializeTables(tables);
jsonObj.put("Tables", tablesJson);
// add colocate table index, used to indicate grouping of table distribution
@ -461,19 +462,20 @@ public class MinidumpUtils {
* @throws IOException this will write to disk, so io exception should be dealed with
*/
public static void serializeInputsToDumpFile(Plan parsedPlan, List<TableIf> tables) throws IOException {
ConnectContext connectContext = ConnectContext.get();
// when playing minidump file, we do not save input again.
if (ConnectContext.get().getSessionVariable().isPlayNereidsDump()
|| !ConnectContext.get().getSessionVariable().isEnableMinidump()) {
if (connectContext.getSessionVariable().isPlayNereidsDump()
|| !connectContext.getSessionVariable().isEnableMinidump()) {
return;
}
if (!ConnectContext.get().getSessionVariable().getMinidumpPath().equals("")) {
MinidumpUtils.DUMP_PATH = ConnectContext.get().getSessionVariable().getMinidumpPath();
if (!connectContext.getSessionVariable().getMinidumpPath().equals("")) {
MinidumpUtils.DUMP_PATH = connectContext.getSessionVariable().getMinidumpPath();
} else {
ConnectContext.get().getSessionVariable().setMinidumpPath("defaultMinidumpPath");
connectContext.getSessionVariable().setMinidumpPath("defaultMinidumpPath");
}
MinidumpUtils.init();
ConnectContext.get().setMinidump(serializeInputs(parsedPlan, tables));
connectContext.setMinidump(serializeInputs(parsedPlan, tables));
}
/**

View File

@ -121,7 +121,7 @@ public class FoldConstantRuleOnFE extends AbstractExpressionRewriteRule {
@Override
public Expression visitEncryptKeyRef(EncryptKeyRef encryptKeyRef, ExpressionRewriteContext context) {
String dbName = encryptKeyRef.getDbName();
ConnectContext connectContext = ConnectContext.get();
ConnectContext connectContext = context.cascadesContext.getConnectContext();
if (Strings.isNullOrEmpty(dbName)) {
dbName = connectContext.getDatabase();
}

View File

@ -78,9 +78,10 @@ public class CTEInline extends DefaultPlanRewriter<LogicalCTEProducer<?>> implem
}
return false;
});
if (ConnectContext.get().getSessionVariable().getEnablePipelineEngine()
&& ConnectContext.get().getSessionVariable().enableCTEMaterialize
&& consumers.size() > ConnectContext.get().getSessionVariable().inlineCTEReferencedThreshold) {
ConnectContext connectContext = ConnectContext.get();
if (connectContext.getSessionVariable().getEnablePipelineEngine()
&& connectContext.getSessionVariable().enableCTEMaterialize
&& consumers.size() > connectContext.getSessionVariable().inlineCTEReferencedThreshold) {
// not inline
Plan right = cteAnchor.right().accept(this, null);
return cteAnchor.withChildren(cteAnchor.left(), right);

View File

@ -165,7 +165,7 @@ public interface Plan extends TreeNode<Plan> {
StringBuilder builder = new StringBuilder();
String me = this.getClass().getSimpleName();
String prefixTail = "";
if (! ConnectContext.get().getSessionVariable().getIgnoreShapePlanNodes().contains(me)) {
if (!ConnectContext.get().getSessionVariable().getIgnoreShapePlanNodes().contains(me)) {
builder.append(prefix).append(shapeInfo()).append("\n");
prefixTail += "--";
}

View File

@ -251,8 +251,8 @@ public class InsertIntoTableCommand extends Command implements ForwardWithSync,
|| ctx.getSessionVariable().isEnableUniqueKeyPartialUpdate()) {
return false;
}
return ConnectContext.get().getSessionVariable().getSqlMode() != SqlModeHelper.MODE_NO_BACKSLASH_ESCAPES
&& physicalOlapTableSink.getTargetTable() instanceof OlapTable && !ConnectContext.get().isTxnModel()
return ctx.getSessionVariable().getSqlMode() != SqlModeHelper.MODE_NO_BACKSLASH_ESCAPES
&& physicalOlapTableSink.getTargetTable() instanceof OlapTable && !ctx.isTxnModel()
&& sink.getFragment().getPlanRoot() instanceof UnionNode && physicalOlapTableSink.getPartitionIds()
.isEmpty() && physicalOlapTableSink.getTargetTable().getTableProperty().getUseSchemaLightChange();
}

View File

@ -44,10 +44,10 @@ public abstract class AlterMTMVInfo {
*/
public void analyze(ConnectContext ctx) throws AnalysisException {
mvName.analyze(ctx);
if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ConnectContext.get(), mvName.getDb(),
if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ctx, mvName.getDb(),
mvName.getTbl(), PrivPredicate.ALTER)) {
String message = ErrorCode.ERR_TABLEACCESS_DENIED_ERROR.formatErrorMsg("ALTER",
ConnectContext.get().getQualifiedUser(), ConnectContext.get().getRemoteIP(),
ctx.getQualifiedUser(), ctx.getRemoteIP(),
mvName.getDb() + ": " + mvName.getTbl());
throw new AnalysisException(message);
}

View File

@ -140,10 +140,10 @@ public class CreateMTMVInfo {
public void analyze(ConnectContext ctx) {
// analyze table name
mvName.analyze(ctx);
if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ConnectContext.get(), mvName.getDb(),
if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ctx, mvName.getDb(),
mvName.getTbl(), PrivPredicate.CREATE)) {
String message = ErrorCode.ERR_TABLEACCESS_DENIED_ERROR.formatErrorMsg("CREATE",
ConnectContext.get().getQualifiedUser(), ConnectContext.get().getRemoteIP(),
ctx.getQualifiedUser(), ctx.getRemoteIP(),
mvName.getDb() + ": " + mvName.getTbl());
throw new AnalysisException(message);
}

View File

@ -46,10 +46,10 @@ public class DropMTMVInfo {
*/
public void analyze(ConnectContext ctx) {
mvName.analyze(ctx);
if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ConnectContext.get(), mvName.getDb(),
if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ctx, mvName.getDb(),
mvName.getTbl(), PrivPredicate.DROP)) {
String message = ErrorCode.ERR_TABLEACCESS_DENIED_ERROR.formatErrorMsg("DROP",
ConnectContext.get().getQualifiedUser(), ConnectContext.get().getRemoteIP(),
ctx.getQualifiedUser(), ctx.getRemoteIP(),
mvName.getDb() + ": " + mvName.getTbl());
throw new AnalysisException(message);
}

View File

@ -56,10 +56,10 @@ public class RefreshMTMVInfo {
*/
public void analyze(ConnectContext ctx) {
mvName.analyze(ctx);
if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ConnectContext.get(), mvName.getDb(),
if (!Env.getCurrentEnv().getAccessManager().checkTblPriv(ctx, mvName.getDb(),
mvName.getTbl(), PrivPredicate.CREATE)) {
String message = ErrorCode.ERR_TABLEACCESS_DENIED_ERROR.formatErrorMsg("CREATE",
ConnectContext.get().getQualifiedUser(), ConnectContext.get().getRemoteIP(),
ctx.getQualifiedUser(), ctx.getRemoteIP(),
mvName.getDb() + ": " + mvName.getTbl());
throw new AnalysisException(message);
}