diff --git a/session/session.go b/session/session.go index 3a89d2dec8485..d0617dee85436 100644 --- a/session/session.go +++ b/session/session.go @@ -2377,7 +2377,9 @@ func runStmt(ctx context.Context, se *session, s sqlexec.Statement) (rs sqlexec. stmtNode := s.GetStmtNode() startTS := se.GetSessionVars().StmtCtx.StmtSnapshotTS if se.GetSessionVars().EnablePlanReplayedContinuesCapture { - checkPlanReplayerContinuesCapture(se, stmtNode, startTS) + if checkPlanReplayerContinuesCaptureValidStmt(stmtNode) { + checkPlanReplayerContinuesCapture(se, stmtNode, startTS) + } } else { checkPlanReplayerCaptureTask(se, stmtNode, startTS) } @@ -2396,6 +2398,16 @@ func runStmt(ctx context.Context, se *session, s sqlexec.Statement) (rs sqlexec. return nil, err } +// only allow select/delete/update/insert/execute stmt captured by continues capture +func checkPlanReplayerContinuesCaptureValidStmt(stmtNode ast.StmtNode) bool { + switch stmtNode.(type) { + case *ast.SelectStmt, *ast.DeleteStmt, *ast.UpdateStmt, *ast.InsertStmt, *ast.ExecuteStmt: + return true + default: + return false + } +} + func checkPlanReplayerCaptureTask(sctx sessionctx.Context, stmtNode ast.StmtNode, startTS uint64) { dom := domain.GetDomain(sctx) if dom == nil {