diff --git a/distsql/distsql_test.go b/distsql/distsql_test.go index d8523b4e83..50e21f6b66 100644 --- a/distsql/distsql_test.go +++ b/distsql/distsql_test.go @@ -157,7 +157,7 @@ func TestAnalyze(t *testing.T) { sctx := newMockSessionContext() sctx.GetSessionVars().EnableChunkRPC = false request, err := (&RequestBuilder{}).SetKeyRanges(nil). - SetAnalyzeRequest(&tipb.AnalyzeReq{}). + SetAnalyzeRequest(&tipb.AnalyzeReq{}, kv.RC). SetKeepOrder(true). Build() require.NoError(t, err) diff --git a/distsql/request_builder.go b/distsql/request_builder.go index 5cc2059ece..aae83a0dd0 100644 --- a/distsql/request_builder.go +++ b/distsql/request_builder.go @@ -158,12 +158,12 @@ func (builder *RequestBuilder) SetDAGRequest(dag *tipb.DAGRequest) *RequestBuild } // SetAnalyzeRequest sets the request type to "ReqTypeAnalyze" and construct request data. -func (builder *RequestBuilder) SetAnalyzeRequest(ana *tipb.AnalyzeReq) *RequestBuilder { +func (builder *RequestBuilder) SetAnalyzeRequest(ana *tipb.AnalyzeReq, isoLevel kv.IsoLevel) *RequestBuilder { if builder.err == nil { builder.Request.Tp = kv.ReqTypeAnalyze builder.Request.Data, builder.err = ana.Marshal() builder.Request.NotFillCache = true - builder.Request.IsolationLevel = kv.SI + builder.Request.IsolationLevel = isoLevel builder.Request.Priority = kv.PriorityLow } diff --git a/distsql/request_builder_test.go b/distsql/request_builder_test.go index 946899a66b..53ea7ff4a3 100644 --- a/distsql/request_builder_test.go +++ b/distsql/request_builder_test.go @@ -481,7 +481,7 @@ func TestRequestBuilder5(t *testing.T) { } actual, err := (&RequestBuilder{}).SetKeyRanges(keyRanges). - SetAnalyzeRequest(&tipb.AnalyzeReq{}). + SetAnalyzeRequest(&tipb.AnalyzeReq{}, kv.RC). SetKeepOrder(true). SetConcurrency(15). Build() @@ -494,7 +494,7 @@ func TestRequestBuilder5(t *testing.T) { KeepOrder: true, Desc: false, Concurrency: 15, - IsolationLevel: kv.SI, + IsolationLevel: kv.RC, Priority: 1, NotFillCache: true, ReadReplicaScope: kv.GlobalReplicaScope, diff --git a/executor/analyze_col.go b/executor/analyze_col.go index f27e6c5221..a846816b18 100644 --- a/executor/analyze_col.go +++ b/executor/analyze_col.go @@ -27,6 +27,7 @@ import ( "github.com/pingcap/tidb/distsql" "github.com/pingcap/tidb/domain" "github.com/pingcap/tidb/expression" + "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" @@ -109,13 +110,15 @@ func (e *AnalyzeColumnsExec) buildResp(ranges []*ranger.Range) (distsql.SelectRe reqBuilder := builder.SetHandleRangesForTables(e.ctx.GetSessionVars().StmtCtx, []int64{e.TableID.GetStatisticsID()}, e.handleCols != nil && !e.handleCols.IsInt(), ranges, nil) builder.SetResourceGroupTagger(e.ctx.GetSessionVars().StmtCtx.GetResourceGroupTagger()) startTS := uint64(math.MaxUint64) + isoLevel := kv.RC if e.ctx.GetSessionVars().EnableAnalyzeSnapshot { startTS = e.snapshot + isoLevel = kv.SI } // Always set KeepOrder of the request to be true, in order to compute // correct `correlation` of columns. kvReq, err := reqBuilder. - SetAnalyzeRequest(e.analyzePB). + SetAnalyzeRequest(e.analyzePB, isoLevel). SetStartTS(startTS). SetKeepOrder(true). SetConcurrency(e.concurrency). diff --git a/executor/analyze_idx.go b/executor/analyze_idx.go index 5726f0846f..2ac3bce77c 100644 --- a/executor/analyze_idx.go +++ b/executor/analyze_idx.go @@ -24,6 +24,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/distsql" "github.com/pingcap/tidb/domain" + "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/ast" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" @@ -144,11 +145,13 @@ func (e *AnalyzeIndexExec) fetchAnalyzeResult(ranges []*ranger.Range, isNullRang } kvReqBuilder.SetResourceGroupTagger(e.ctx.GetSessionVars().StmtCtx.GetResourceGroupTagger()) startTS := uint64(math.MaxUint64) + isoLevel := kv.RC if e.ctx.GetSessionVars().EnableAnalyzeSnapshot { startTS = e.snapshot + isoLevel = kv.SI } kvReq, err := kvReqBuilder. - SetAnalyzeRequest(e.analyzePB). + SetAnalyzeRequest(e.analyzePB, isoLevel). SetStartTS(startTS). SetKeepOrder(true). SetConcurrency(e.concurrency).