diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java b/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java index 86a4e63c801eee..31343d523e117b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/profile/SummaryProfile.java @@ -101,6 +101,17 @@ public class SummaryProfile { public static final String GET_PARTITION_VERSION_BY_HAS_DATA_COUNT = "Get Partition Version Count (hasData)"; public static final String GET_TABLE_VERSION_TIME = "Get Table Version Time"; public static final String GET_TABLE_VERSION_COUNT = "Get Table Version Count"; + public static final String MAX_CONCURRENCY = "Max Concurrency"; + public static final String MAX_QUEUE_SIZE = "Max Queue Size"; + public static final String QUEUE_TIMEOUT = "Queue Timeout"; + public static final String SCAN_THREAD_NUM = "Scan Thread Num"; + public static final String MAX_REMOTE_SCAN_THREAD_NUM = "Max Remote Scan Thread Num"; + public static final String MIN_REMOTE_SCAN_THREAD_NUM = "Min Remote Scan Thread Num"; + public static final String MEMORY_LOW_WATERMARK = "Memory Low Watermark"; + public static final String MEMORY_HIGH_WATERMARK = "Memory High Watermark"; + public static final String TAG = "Tag"; + public static final String READ_BYTES_PER_SECOND = "Read Bytes Per Second"; + public static final String REMOTE_READ_BYTES_PER_SECOND = "Remote Read Bytes Per Second"; public static final String PARSE_SQL_TIME = "Parse SQL Time"; public static final String NEREIDS_LOCK_TABLE_TIME = "Nereids Lock Table Time"; @@ -148,6 +159,16 @@ public class SummaryProfile { // The display order of execution summary items. public static final ImmutableList EXECUTION_SUMMARY_KEYS = ImmutableList.of( WORKLOAD_GROUP, + MAX_CONCURRENCY, + MAX_QUEUE_SIZE, + SCAN_THREAD_NUM, + MAX_REMOTE_SCAN_THREAD_NUM, + MIN_REMOTE_SCAN_THREAD_NUM, + MEMORY_LOW_WATERMARK, + MEMORY_HIGH_WATERMARK, + TAG, + READ_BYTES_PER_SECOND, + REMOTE_READ_BYTES_PER_SECOND, PARSE_SQL_TIME, PLAN_TIME, NEREIDS_GARBAGE_COLLECT_TIME, @@ -241,8 +262,19 @@ public class SummaryProfile { .put(HMS_ADD_PARTITION_CNT, 2) .put(HMS_UPDATE_PARTITION_TIME, 1) .put(HMS_UPDATE_PARTITION_CNT, 2) + .put(MAX_QUEUE_SIZE, 1) + .put(QUEUE_TIMEOUT, 1) + .put(MAX_CONCURRENCY, 1) + .put(MAX_REMOTE_SCAN_THREAD_NUM, 1) + .put(SCAN_THREAD_NUM, 1) + .put(MIN_REMOTE_SCAN_THREAD_NUM, 1) + .put(MEMORY_LOW_WATERMARK, 1) + .put(MEMORY_HIGH_WATERMARK, 1) + .put(REMOTE_READ_BYTES_PER_SECOND, 1) + .put(READ_BYTES_PER_SECOND, 1) + .put(TAG, 1) .build(); - + public boolean parsedByConnectionProcess = false; @SerializedName(value = "summaryProfile") private RuntimeProfile summaryProfile = new RuntimeProfile(SUMMARY_PROFILE_NAME); @SerializedName(value = "executionSummaryProfile") @@ -253,7 +285,6 @@ public class SummaryProfile { private long parseSqlFinishTime = -1; @SerializedName(value = "nereidsLockTableFinishTime") private long nereidsLockTableFinishTime = -1; - @SerializedName(value = "nereidsCollectTablePartitionFinishTime") private long nereidsCollectTablePartitionFinishTime = -1; @SerializedName(value = "nereidsCollectTablePartitionTime") @@ -367,19 +398,53 @@ public class SummaryProfile { private long externalTvfInitTime = 0; @SerializedName(value = "nereidsPartitiionPruneTime") private long nereidsPartitiionPruneTime = 0; + @SerializedName("maxConcurrency") + private int maxConcurrency = 0; + @SerializedName("maxQueueSize") + private int maxQueueSize = 0; + @SerializedName("queueTimeout") + private int queueTimeout = 0; + @SerializedName("scanThreadNum") + private int scanThreadNum = -1; + @SerializedName("maxRemoteScanThreadNum") + private int maxRemoteScanThreadNum = -1; + @SerializedName("minRemoteScanThreadNum") + private int minRemoteScanThreadNum = -1; + @SerializedName("memoryLowWatermark") + private int memoryLowWatermark = 0; + @SerializedName("memoryHighWatermark") + private int memoryHighWatermark = 0; + @SerializedName("tag") + private String tag = ""; + @SerializedName("readBytesPerSecond") + private long readBytesPerSecond = -1L; + @SerializedName("remoteReadBytesPerSecond") + private long remoteReadBytesPerSecond = -1L; // BE -> (RPC latency from FE to BE, Execution latency on bthread, Duration of doing work, RPC latency from BE // to FE) private Map> rpcPhase1Latency; private Map> rpcPhase2Latency; - private Map assignedWeightPerBackend; - public boolean parsedByConnectionProcess = false; - public SummaryProfile() { init(); } + public static SummaryProfile read(DataInput input) throws IOException { + return GsonUtils.GSON.fromJson(Text.readString(input), SummaryProfile.class); + } + + public static SummaryProfile getSummaryProfile(ConnectContext connectContext) { + ConnectContext ctx = connectContext == null ? ConnectContext.get() : connectContext; + if (ctx != null) { + StmtExecutor executor = ctx.getExecutor(); + if (executor != null) { + return executor.getSummaryProfile(); + } + } + return null; + } + private void init() { for (String key : SUMMARY_KEYS) { summaryProfile.addInfoString(key, "N/A"); @@ -401,10 +466,6 @@ public void fuzzyInit() { } } - public static SummaryProfile read(DataInput input) throws IOException { - return GsonUtils.GSON.fromJson(Text.readString(input), SummaryProfile.class); - } - public String getProfileId() { return this.summaryProfile.getInfoString(PROFILE_ID); } @@ -442,11 +503,11 @@ public void queryFinished() { Map m = assignedWeightPerBackend.entrySet().stream() .sorted(Map.Entry.comparingByValue()) .collect(Collectors.toMap( - entry -> entry.getKey().getAddress(), - Entry::getValue, - (v1, v2) -> v1, - LinkedHashMap::new - )); + entry -> entry.getKey().getAddress(), + Entry::getValue, + (v1, v2) -> v1, + LinkedHashMap::new + )); executionSummaryProfile.addInfoString( SPLITS_ASSIGNMENT_WEIGHT, new GsonBuilder().create().toJson(m)); @@ -514,6 +575,22 @@ private void updateExecutionSummaryProfile() { RuntimeProfile.printCounter(queryFetchResultConsumeTime, TUnit.TIME_MS)); executionSummaryProfile.addInfoString(WRITE_RESULT_TIME, RuntimeProfile.printCounter(queryWriteResultConsumeTime, TUnit.TIME_MS)); + executionSummaryProfile.addInfoString(MAX_CONCURRENCY, RuntimeProfile.printCounter(maxConcurrency, TUnit.UNIT)); + executionSummaryProfile.addInfoString(QUEUE_TIMEOUT, RuntimeProfile.printCounter(queueTimeout, TUnit.UNIT)); + executionSummaryProfile.addInfoString(MAX_QUEUE_SIZE, RuntimeProfile.printCounter(maxQueueSize, TUnit.UNIT)); + executionSummaryProfile.addInfoString(MEMORY_HIGH_WATERMARK, + RuntimeProfile.printCounter(memoryHighWatermark, TUnit.UNIT)); + executionSummaryProfile.addInfoString(SCAN_THREAD_NUM, RuntimeProfile.printCounter(scanThreadNum, TUnit.UNIT)); + executionSummaryProfile.addInfoString(MAX_REMOTE_SCAN_THREAD_NUM, + RuntimeProfile.printCounter(maxRemoteScanThreadNum, TUnit.UNIT)); + executionSummaryProfile.addInfoString(MIN_REMOTE_SCAN_THREAD_NUM, + RuntimeProfile.printCounter(minRemoteScanThreadNum, TUnit.UNIT)); + executionSummaryProfile.addInfoString(MEMORY_LOW_WATERMARK, + RuntimeProfile.printCounter(memoryLowWatermark, TUnit.UNIT)); + executionSummaryProfile.addInfoString(READ_BYTES_PER_SECOND, + RuntimeProfile.printCounter(readBytesPerSecond, TUnit.BYTES_PER_SECOND)); + executionSummaryProfile.addInfoString(REMOTE_READ_BYTES_PER_SECOND, + RuntimeProfile.printCounter(remoteReadBytesPerSecond, TUnit.BYTES_PER_SECOND)); setTransactionSummary(); if (Config.isCloudMode()) { @@ -606,10 +683,6 @@ public void setNereidsDistributeTime(long distributeFinishTime) { this.nereidsDistributeFinishTime = distributeFinishTime; } - public void setQueryBeginTime(long queryBeginTime) { - this.queryBeginTime = queryBeginTime; - } - public void setInitScanNodeStartTime() { this.initScanNodeStartTime = TimeUtils.getStartTimeMs(); } @@ -722,6 +795,10 @@ public long getQueryBeginTime() { return queryBeginTime; } + public void setQueryBeginTime(long queryBeginTime) { + this.queryBeginTime = queryBeginTime; + } + public void setRpcPhase1Latency(Map> rpcPhase1Latency) { this.rpcPhase1Latency = rpcPhase1Latency; } @@ -730,104 +807,6 @@ public void setRpcPhase2Latency(Map> rpcPhase2Latenc this.rpcPhase2Latency = rpcPhase2Latency; } - public static class SummaryBuilder { - private Map map = Maps.newHashMap(); - - public SummaryBuilder profileId(String val) { - map.put(PROFILE_ID, val); - return this; - } - - public SummaryBuilder dorisVersion(String val) { - map.put(DORIS_VERSION, val); - return this; - } - - public SummaryBuilder taskType(String val) { - map.put(TASK_TYPE, val); - return this; - } - - public SummaryBuilder startTime(String val) { - map.put(START_TIME, val); - return this; - } - - public SummaryBuilder endTime(String val) { - map.put(END_TIME, val); - return this; - } - - public SummaryBuilder totalTime(String val) { - map.put(TOTAL_TIME, val); - return this; - } - - public SummaryBuilder taskState(String val) { - map.put(TASK_STATE, val); - return this; - } - - public SummaryBuilder user(String val) { - map.put(USER, val); - return this; - } - - public SummaryBuilder defaultCatalog(String val) { - map.put(DEFAULT_CATALOG, val); - return this; - } - - public SummaryBuilder defaultDb(String val) { - map.put(DEFAULT_DB, val); - return this; - } - - public SummaryBuilder workloadGroup(String workloadGroup) { - map.put(WORKLOAD_GROUP, workloadGroup); - return this; - } - - public SummaryBuilder sqlStatement(String val) { - map.put(SQL_STATEMENT, val); - return this; - } - - public SummaryBuilder isCached(String val) { - map.put(IS_CACHED, val); - return this; - } - - public SummaryBuilder totalInstancesNum(String val) { - map.put(TOTAL_INSTANCES_NUM, val); - return this; - } - - public SummaryBuilder instancesNumPerBe(String val) { - map.put(INSTANCES_NUM_PER_BE, val); - return this; - } - - public SummaryBuilder parallelFragmentExecInstance(String val) { - map.put(PARALLEL_FRAGMENT_EXEC_INSTANCE, val); - return this; - } - - public SummaryBuilder traceId(String val) { - map.put(TRACE_ID, val); - return this; - } - - public SummaryBuilder isNereids(String isNereids) { - map.put(IS_NEREIDS, isNereids); - return this; - } - - public Map build() { - return map; - } - } - public int getParseSqlTimeMs() { return getTimeMs(parseSqlFinishTime, parseSqlStartTime); } @@ -1057,6 +1036,52 @@ public void setHmsAddPartitionTime() { this.hmsAddPartitionTime = TimeUtils.getStartTimeMs() - tempStarTime; } + public void setMaxQueueSize(int maxQueueSize) { + this.maxQueueSize = maxQueueSize; + } + + public void setMaxConcurrency(int maxConcurrency) { + this.maxConcurrency = maxConcurrency; + } + + public void setScanThreadNum(int scanThreadNum) { + this.scanThreadNum = scanThreadNum; + } + + public void setMaxRemoteScanThreadNum(int maxRemoteScanThreadNum) { + this.maxRemoteScanThreadNum = maxRemoteScanThreadNum; + } + + public void setMinRemoteScanThreadNum(int minRemoteScanThreadNum) { + this.minRemoteScanThreadNum = minRemoteScanThreadNum; + } + + public void setMemoryLowWatermark(int memoryLowWatermark) { + this.memoryLowWatermark = memoryLowWatermark; + } + + public void setMemoryHighWatermark(int memoryHighWatermark) { + this.memoryHighWatermark = memoryHighWatermark; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public void setReadBytesPerSecond(int readBytesPerSecond) { + this.readBytesPerSecond = readBytesPerSecond; + } + + + public void setRemoteReadBytesPerSecond(int remoteReadBytesPerSecond) { + this.remoteReadBytesPerSecond = remoteReadBytesPerSecond; + } + + + public void setQueueTimeout(int queueTimeout) { + this.queueTimeout = queueTimeout; + } + public void addHmsAddPartitionCnt(long c) { this.hmsAddPartitionCnt = c; } @@ -1176,17 +1201,6 @@ public void setAssignedWeightPerBackend(Map assignedWeightPerBack this.assignedWeightPerBackend = assignedWeightPerBackend; } - public static SummaryProfile getSummaryProfile(ConnectContext connectContext) { - ConnectContext ctx = connectContext == null ? ConnectContext.get() : connectContext; - if (ctx != null) { - StmtExecutor executor = ctx.getExecutor(); - if (executor != null) { - return executor.getSummaryProfile(); - } - } - return null; - } - public String getPlanTime() { String planTimesMs = "{" + "\"plan\"" + ":" + this.getPlanTimeMs() + "," @@ -1227,4 +1241,102 @@ public String getScheduleTime() { + "\"fragment_rpc_count\"" + ":" + this.getFragmentRPCCount() + "}"; } + + public static class SummaryBuilder { + private Map map = Maps.newHashMap(); + + public SummaryBuilder profileId(String val) { + map.put(PROFILE_ID, val); + return this; + } + + public SummaryBuilder dorisVersion(String val) { + map.put(DORIS_VERSION, val); + return this; + } + + public SummaryBuilder taskType(String val) { + map.put(TASK_TYPE, val); + return this; + } + + public SummaryBuilder startTime(String val) { + map.put(START_TIME, val); + return this; + } + + public SummaryBuilder endTime(String val) { + map.put(END_TIME, val); + return this; + } + + public SummaryBuilder totalTime(String val) { + map.put(TOTAL_TIME, val); + return this; + } + + public SummaryBuilder taskState(String val) { + map.put(TASK_STATE, val); + return this; + } + + public SummaryBuilder user(String val) { + map.put(USER, val); + return this; + } + + public SummaryBuilder defaultCatalog(String val) { + map.put(DEFAULT_CATALOG, val); + return this; + } + + public SummaryBuilder defaultDb(String val) { + map.put(DEFAULT_DB, val); + return this; + } + + public SummaryBuilder workloadGroup(String workloadGroup) { + map.put(WORKLOAD_GROUP, workloadGroup); + return this; + } + + public SummaryBuilder sqlStatement(String val) { + map.put(SQL_STATEMENT, val); + return this; + } + + public SummaryBuilder isCached(String val) { + map.put(IS_CACHED, val); + return this; + } + + public SummaryBuilder totalInstancesNum(String val) { + map.put(TOTAL_INSTANCES_NUM, val); + return this; + } + + public SummaryBuilder instancesNumPerBe(String val) { + map.put(INSTANCES_NUM_PER_BE, val); + return this; + } + + public SummaryBuilder parallelFragmentExecInstance(String val) { + map.put(PARALLEL_FRAGMENT_EXEC_INSTANCE, val); + return this; + } + + public SummaryBuilder traceId(String val) { + map.put(TRACE_ID, val); + return this; + } + + public SummaryBuilder isNereids(String isNereids) { + map.put(IS_NEREIDS, isNereids); + return this; + } + + public Map build() { + return map; + } + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java index d369afcdc6b28e..e2d5317fbf2d84 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java @@ -121,6 +121,7 @@ import org.apache.doris.qe.cache.CacheAnalyzer; import org.apache.doris.qe.cache.SqlCache; import org.apache.doris.resource.computegroup.ComputeGroupMgr; +import org.apache.doris.resource.workloadgroup.WorkloadGroup; import org.apache.doris.rpc.BackendServiceProxy; import org.apache.doris.rpc.RpcException; import org.apache.doris.statistics.ResultRow; @@ -261,9 +262,9 @@ public StmtExecutor(ConnectContext ctx, StatementBase parsedStmt, boolean isComS } this.context.setStatementContext(statementContext); this.profile = new Profile( - context.getSessionVariable().enableProfile(), - context.getSessionVariable().getProfileLevel(), - context.getSessionVariable().getAutoProfileThresholdMs()); + context.getSessionVariable().enableProfile(), + context.getSessionVariable().getProfileLevel(), + context.getSessionVariable().getAutoProfileThresholdMs()); } public boolean isProxy() { @@ -339,6 +340,72 @@ private Map getSummaryInfo(boolean isFinished) { builder.parallelFragmentExecInstance(String.valueOf(context.sessionVariable.getParallelExecInstanceNum())); builder.traceId(context.getSessionVariable().getTraceId()); builder.isNereids(context.getState().isNereids() ? "Yes" : "No"); + try { + List list = Env.getCurrentEnv() + .getWorkloadGroupMgr() + .getWorkloadGroup(ConnectContext.get()); + + if (!list.isEmpty()) { + WorkloadGroup wg = list.get(0); + SummaryProfile summary = getSummaryProfile(); + summary.setMaxConcurrency( + Integer.parseInt(wg.getProperties().getOrDefault(WorkloadGroup.MAX_CONCURRENCY, "0"))); + summary.setMaxQueueSize(Integer.parseInt(wg.getProperties() + .getOrDefault(WorkloadGroup.MAX_QUEUE_SIZE, "0"))); + summary.setScanThreadNum(Integer.parseInt( + wg.getProperties().getOrDefault(WorkloadGroup.SCAN_THREAD_NUM, "-1"))); + summary.setMemoryHighWatermark(Integer.parseInt( + wg.getProperties().getOrDefault(WorkloadGroup.MEMORY_HIGH_WATERMARK, + String.valueOf(WorkloadGroup.MEMORY_HIGH_WATERMARK_DEFAULT_VALUE)))); + summary.setMemoryLowWatermark( + Integer.parseInt( + wg.getProperties().getOrDefault( + WorkloadGroup.MEMORY_LOW_WATERMARK, + String.valueOf(WorkloadGroup.MEMORY_LOW_WATERMARK_DEFAULT_VALUE) + ) + ) + ); + summary.setMinRemoteScanThreadNum( + Integer.parseInt( + wg.getProperties().getOrDefault( + WorkloadGroup.MIN_REMOTE_SCAN_THREAD_NUM, + "-1" + ) + ) + ); + summary.setMaxRemoteScanThreadNum( + Integer.parseInt( + wg.getProperties().getOrDefault( + WorkloadGroup.MAX_REMOTE_SCAN_THREAD_NUM, + "-1" + ) + ) + ); + summary.setTag( + wg.getProperties().getOrDefault(WorkloadGroup.TAG, + "")); + summary.setReadBytesPerSecond( + Integer.parseInt( + wg.getProperties().getOrDefault( + WorkloadGroup.READ_BYTES_PER_SECOND, + "-1" + ) + ) + ); + summary.setRemoteReadBytesPerSecond( + Integer.parseInt( + wg.getProperties().getOrDefault( + WorkloadGroup.REMOTE_READ_BYTES_PER_SECOND, + "-1" + ) + ) + ); + summary.setQueueTimeout(Integer.parseInt( + wg.getProperties().getOrDefault(WorkloadGroup.QUEUE_TIMEOUT, "0"))); + } + } catch (UserException e) { + LOG.warn(e); + } return builder.build(); } @@ -931,7 +998,7 @@ private void handleQueryWithRetry(TUniqueId queryId) throws Exception { // errCode = 2, detailMessage = No backend available as scan node, // please check the status of your backends. [10003: not alive] List bes = Env.getCurrentSystemInfo().getAllBackendIds().stream() - .map(id -> Long.toString(id)).collect(Collectors.toList()); + .map(id -> Long.toString(id)).collect(Collectors.toList()); String msg = e.getMessage(); if (e instanceof UserException && msg.contains(SystemInfoService.NO_SCAN_NODE_BACKEND_AVAILABLE_MSG)) { @@ -1184,7 +1251,7 @@ private void handleCacheStmt(CacheAnalyzer cacheAnalyzer, MysqlChannel channel) private void handleQueryStmt() throws Exception { if (LOG.isDebugEnabled()) { LOG.debug("Handling query {} with query id {}", - originStmt.originStmt, DebugUtil.printId(context.queryId)); + originStmt.originStmt, DebugUtil.printId(context.queryId)); } if (context.getConnectType() == ConnectType.MYSQL) { @@ -1270,11 +1337,11 @@ public void executeAndSendResult(boolean isOutfileQuery, boolean isSendFields, CoordInterface coordBase = null; if (statementContext.isShortCircuitQuery()) { ShortCircuitQueryContext shortCircuitQueryContext = - statementContext.getShortCircuitQueryContext() != null - ? statementContext.getShortCircuitQueryContext() - : new ShortCircuitQueryContext(planner, (Queriable) parsedStmt); + statementContext.getShortCircuitQueryContext() != null + ? statementContext.getShortCircuitQueryContext() + : new ShortCircuitQueryContext(planner, (Queriable) parsedStmt); coordBase = new PointQueryExecutor(shortCircuitQueryContext, - context.getSessionVariable().getMaxMsgSizeOfResultReceiver()); + context.getSessionVariable().getMaxMsgSizeOfResultReceiver()); context.getState().setIsQuery(true); } else if (planner instanceof NereidsPlanner && ((NereidsPlanner) planner).getDistributedPlans() != null) { coord = new NereidsCoordinator(context, @@ -1476,8 +1543,8 @@ public static void syncLoadForTablets(List> backendsList, List tabletIdList = new ArrayList(); Set beTabletIds = ((CloudEnv) Env.getCurrentEnv()) - .getCloudTabletRebalancer() - .getSnapshotTabletsInPrimaryByBeId(backend.getId()); + .getCloudTabletRebalancer() + .getSnapshotTabletsInPrimaryByBeId(backend.getId()); allTabletIds.forEach(tabletId -> { if (beTabletIds.contains(tabletId)) { tabletIdList.add(tabletId); @@ -1617,7 +1684,8 @@ private void sendFields(List colNames, List types) throws IOExcept sendFields(colNames, null, types); } - private void sendFields(List colNames, List fieldInfos, List types) throws IOException { + private void sendFields(List colNames, List fieldInfos, List types) throws + IOException { Preconditions.checkState(context.getConnectType() == ConnectType.MYSQL); // sends how many columns serializer.reset(); @@ -1628,7 +1696,7 @@ private void sendFields(List colNames, List fieldInfos, List< context.getMysqlChannel().sendOnePacket(serializer.toByteBuffer()); StatementContext statementContext = context.getStatementContext(); boolean isShortCircuited = statementContext.isShortCircuitQuery() - && statementContext.getShortCircuitQueryContext() != null; + && statementContext.getShortCircuitQueryContext() != null; ShortCircuitQueryContext ctx = statementContext.getShortCircuitQueryContext(); // send field one by one for (int i = 0; i < colNames.size(); ++i) { @@ -1812,7 +1880,7 @@ public void handleExplainStmt(String result, boolean isNereids) throws IOExcepti public void handleReplayStmt(String result) throws IOException { ShowResultSetMetaData metaData = ShowResultSetMetaData.builder() .addColumn(new Column("Plan Replayer dump url", - ScalarType.createVarchar(20))) + ScalarType.createVarchar(20))) .build(); if (context.getConnectType() == ConnectType.MYSQL) { sendMetaData(metaData); @@ -1852,7 +1920,7 @@ public Data.PQueryStatistics getQueryStatisticsForAuditLog() { private boolean isShortCircuitedWithCtx() { return statementContext.isShortCircuitQuery() - && statementContext.getShortCircuitQueryContext() != null; + && statementContext.getShortCircuitQueryContext() != null; } private List exprToType(List exprs) {