[inner-2082] fix: the commit time statistics in the slow log are incorrect

This commit is contained in:
wenyh1
2024-01-07 12:12:20 +08:00
parent 55313601c3
commit e6f6f949cd
5 changed files with 44 additions and 13 deletions

View File

@@ -180,6 +180,13 @@ public class NonBlockingSession extends Session {
provider.startProcess(shardingService.getConnection().getId());
}
public void endParseTCL() {
if (traceEnable || SlowQueryLog.getInstance().isEnableSlowLog()) {
traceResult.ready();
traceResult.setTCL();
}
}
public void endParse() {
sessionStage = SessionStage.Route_Calculation;
if (traceEnable || SlowQueryLog.getInstance().isEnableSlowLog()) {

View File

@@ -14,6 +14,7 @@ public final class BeginHandler {
}
public static void handle(String stmt, ShardingService service) {
service.getSession2().endParseTCL();
if (service.isTxStart() || !service.isAutocommit()) {
service.beginInTx(stmt);
} else {
@@ -21,6 +22,7 @@ public final class BeginHandler {
StatisticListener.getInstance().record(service, r -> r.onTxStart(service));
TxnLogHelper.putTxnLog(service, stmt);
service.writeOkPacket();
service.getSession2().setResponseTime(true);
}
}
}

View File

@@ -12,6 +12,7 @@ public final class CommitHandler {
}
public static void handle(String stmt, ShardingService service) {
service.getSession2().endParseTCL();
service.transactionsCount();
service.commit(stmt);
}

View File

@@ -14,6 +14,7 @@ public final class RollBackHandler {
}
public static void handle(String stmt, ShardingService service) {
service.getSession2().endParseTCL();
if (service.isTxStart() || !service.isAutocommit()) {
StatisticListener.getInstance().record(service, r -> r.onTxEnd());
TxnLogHelper.putTxnLog(service, stmt);

View File

@@ -24,7 +24,7 @@ public class TraceResult implements Cloneable {
public enum SqlTraceType {
SINGLE_NODE_QUERY, MULTI_NODE_QUERY, MULTI_NODE_GROUP, COMPLEX_QUERY;
SINGLE_NODE_QUERY, MULTI_NODE_QUERY, MULTI_NODE_GROUP, COMPLEX_QUERY, SIMPLE_QUERY;
}
private static final Logger LOGGER = LoggerFactory.getLogger(TraceResult.class);
@@ -53,11 +53,17 @@ public class TraceResult implements Cloneable {
private long veryEnd;
private SqlTraceType type;
private boolean subQuery = false;
private volatile boolean isTCL = false;
public void setVeryStartPrepare(long veryStartPrepare) {
prepareFinished = false;
this.veryStartPrepare = veryStartPrepare;
this.requestStartPrepare = new TraceRecord(veryStartPrepare);
this.isTCL = false;
}
public void setTCL() {
this.isTCL = true;
}
public void setRouteStart(TraceRecord routeStart) {
@@ -260,6 +266,7 @@ public class TraceResult implements Cloneable {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("start genTraceResult");
}
List<String[]> lst = new ArrayList<>();
if (!isCompleted()) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("collect info not in pairs,veryEnd:" + veryEnd + ",connFlagMap.size:" + connFlagMap.size() +
@@ -267,19 +274,23 @@ public class TraceResult implements Cloneable {
",recordStartMap.size:" + recordStartMap.size() + ",recordEndMap.size:" + recordEndMap.size());
}
return null;
}
List<String[]> lst = new ArrayList<>();
lst.add(genTraceRecord("Read_SQL", requestStart.getTimestamp(), parseStart.getTimestamp()));
lst.add(genTraceRecord("Parse_SQL", parseStart.getTimestamp(), routeStart.getTimestamp()));
if (simpleHandler != null) {
if (genSimpleResults(lst)) return null;
} else if (builder != null) {
if (genComplexQueryResults(lst)) return null;
} else if (isTCL) {
lst.add(genTraceRecord("Read_SQL", requestStart.getTimestamp(), parseStart.getTimestamp()));
lst.add(genTraceRecord("Parse_SQL", parseStart.getTimestamp(), routeStart.getTimestamp()));
lst.add(genTraceRecord("Write_to_Client", routeStart.getTimestamp(), veryEnd));
} else {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("not support trace this query");
lst.add(genTraceRecord("Read_SQL", requestStart.getTimestamp(), parseStart.getTimestamp()));
lst.add(genTraceRecord("Parse_SQL", parseStart.getTimestamp(), routeStart.getTimestamp()));
if (simpleHandler != null) {
if (genSimpleResults(lst)) return null;
} else if (builder != null) {
if (genComplexQueryResults(lst)) return null;
} else {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("not support trace this query");
}
return null;
}
return null;
}
lst.add(genTraceRecord("Over_All", veryStart, veryEnd));
if (LOGGER.isDebugEnabled()) {
@@ -572,10 +583,13 @@ public class TraceResult implements Cloneable {
}
public boolean isCompleted() {
return veryStart != 0 && veryEnd != 0 && connFlagMap.size() != 0 && connReceivedMap.size() == connFinishedMap.size() && recordStartMap.size() == recordEndMap.size();
return veryStart != 0 && veryEnd != 0 && (isTCL) || (connFlagMap.size() != 0 && connReceivedMap.size() == connFinishedMap.size() && recordStartMap.size() == recordEndMap.size());
}
public SqlTraceType getType() {
if (this.type == null) {
return SqlTraceType.SIMPLE_QUERY;
}
return this.type;
}
@@ -590,6 +604,12 @@ public class TraceResult implements Cloneable {
",recordStartMap.size:" + connReceivedMap.size() + ",recordEndMap.size:" + connFinishedMap.size());
}
return null;
} else if (isTCL) {
List<String[]> lst = new ArrayList<>();
lst.add(genLogRecord("Read_SQL", requestStart.getTimestamp(), parseStart.getTimestamp()));
lst.add(genLogRecord("Inner_Execute", parseStart.getTimestamp(), veryEnd));
lst.add(genLogRecord("Write_Client", veryEnd, veryEnd));
return lst;
}
List<String[]> lst = new ArrayList<>();
lst.add(genLogRecord("Read_SQL", requestStart.getTimestamp(), parseStart.getTimestamp()));