[refactor](Nereids): avoid ConnectContext.get() ASAP to improve proformance (#29952)
This commit is contained in:
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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 += "--";
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user