diff --git a/executor/batch_point_get.go b/executor/batch_point_get.go index c3ed1834024f4..d8f1640687173 100644 --- a/executor/batch_point_get.go +++ b/executor/batch_point_get.go @@ -21,11 +21,7 @@ import ( "github.com/pingcap/parser/model" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/sessionctx/variable" -<<<<<<< HEAD "github.com/pingcap/tidb/table/tables" -======= - "github.com/pingcap/tidb/store/tikv" ->>>>>>> c397584... executor: add runtime information for the batch-point-get executor (#18828) "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" @@ -63,9 +59,6 @@ type BatchPointGetExec struct { // virtualColumnRetFieldTypes records the RetFieldTypes of virtual columns. virtualColumnRetFieldTypes []*types.FieldType - - snapshot kv.Snapshot - stats *pointGetRuntimeStats } // buildVirtualColumnInfo saves virtual column indices and sort them in definition order @@ -81,57 +74,11 @@ func (e *BatchPointGetExec) buildVirtualColumnInfo() { // Open implements the Executor interface. func (e *BatchPointGetExec) Open(context.Context) error { -<<<<<<< HEAD -======= - e.snapshotTS = e.startTS - txnCtx := e.ctx.GetSessionVars().TxnCtx - if e.lock { - e.snapshotTS = txnCtx.GetForUpdateTS() - } - txn, err := e.ctx.Txn(false) - if err != nil { - return err - } - e.txn = txn - var snapshot kv.Snapshot - if txn.Valid() && txnCtx.StartTS == txnCtx.GetForUpdateTS() { - // We can safely reuse the transaction snapshot if startTS is equal to forUpdateTS. - // The snapshot may contains cache that can reduce RPC call. - snapshot = txn.GetSnapshot() - } else { - snapshot, err = e.ctx.GetStore().GetSnapshot(kv.Version{Ver: e.snapshotTS}) - if err != nil { - return err - } - } - if e.runtimeStats != nil { - snapshotStats := &tikv.SnapshotRuntimeStats{} - e.stats = &pointGetRuntimeStats{ - BasicRuntimeStats: e.runtimeStats, - SnapshotRuntimeStats: snapshotStats, - } - snapshot.SetOption(kv.CollectRuntimeStats, snapshotStats) - e.ctx.GetSessionVars().StmtCtx.RuntimeStatsColl.RegisterStats(e.id.String(), e.stats) - } - if e.ctx.GetSessionVars().GetReplicaRead().IsFollowerRead() { - snapshot.SetOption(kv.ReplicaRead, kv.ReplicaReadFollower) - } - snapshot.SetOption(kv.TaskID, e.ctx.GetSessionVars().StmtCtx.TaskID) - var batchGetter kv.BatchGetter = snapshot - if txn.Valid() { - batchGetter = kv.NewBufferBatchGetter(txn.GetMemBuffer(), &PessimisticLockCacheGetter{txnCtx: txnCtx}, snapshot) - } - e.snapshot = snapshot - e.batchGetter = batchGetter ->>>>>>> c397584... executor: add runtime information for the batch-point-get executor (#18828) return nil } // Close implements the Executor interface. func (e *BatchPointGetExec) Close() error { - if e.runtimeStats != nil && e.snapshot != nil { - e.snapshot.DelOption(kv.CollectRuntimeStats) - } return nil } diff --git a/executor/point_get.go b/executor/point_get.go index fb0864a87814f..2fe7519b7ea82 100644 --- a/executor/point_get.go +++ b/executor/point_get.go @@ -150,28 +150,6 @@ func (e *PointGetExecutor) Next(ctx context.Context, req *chunk.Chunk) error { e.snapshot.SetOption(kv.ReplicaRead, kv.ReplicaReadFollower) } e.snapshot.SetOption(kv.TaskID, e.ctx.GetSessionVars().StmtCtx.TaskID) -<<<<<<< HEAD -======= - return nil -} - -// Close implements the Executor interface. -func (e *PointGetExecutor) Close() error { - if e.runtimeStats != nil && e.snapshot != nil { - e.snapshot.DelOption(kv.CollectRuntimeStats) - } - return nil -} - -// Next implements the Executor interface. -func (e *PointGetExecutor) Next(ctx context.Context, req *chunk.Chunk) error { - req.Reset() - if e.done { - return nil - } - e.done = true - ->>>>>>> c397584... executor: add runtime information for the batch-point-get executor (#18828) var tblID int64 if e.partInfo != nil { tblID = e.partInfo.ID diff --git a/planner/core/integration_test.go b/planner/core/integration_test.go index 84137533f42f7..de08a3b84176c 100644 --- a/planner/core/integration_test.go +++ b/planner/core/integration_test.go @@ -1177,95 +1177,3 @@ func (s *testIntegrationSuite) TestIssue16935(c *C) { tk.MustQuery("SELECT * FROM t0 LEFT JOIN v0 ON TRUE WHERE v0.c0 IS NULL;") } -<<<<<<< HEAD -======= - -func (s *testIntegrationSuite) TestAccessPathOnClusterIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("set @@tidb_enable_clustered_index = 1") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t1 (a int, b varchar(20), c decimal(40,10), d int, primary key(a,b), key(c))") - tk.MustExec(`insert into t1 values (1,"111",1.1,11), (2,"222",2.2,12), (3,"333",3.3,13)`) - tk.MustExec("analyze table t1") - - var input []string - var output []struct { - SQL string - Plan []string - Res []string - } - s.testData.GetTestCases(c, &input, &output) - for i, tt := range input { - s.testData.OnRecord(func() { - output[i].SQL = tt - output[i].Plan = s.testData.ConvertRowsToStrings(tk.MustQuery("explain " + tt).Rows()) - output[i].Res = s.testData.ConvertRowsToStrings(tk.MustQuery(tt).Sort().Rows()) - }) - tk.MustQuery("explain " + tt).Check(testkit.Rows(output[i].Plan...)) - tk.MustQuery(tt).Sort().Check(testkit.Rows(output[i].Res...)) - } -} - -func (s *testIntegrationSuite) TestClusterIndexUniqueDoubleRead(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("create database cluster_idx_unique_double_read;") - tk.MustExec("use cluster_idx_unique_double_read;") - defer tk.MustExec("drop database cluster_idx_unique_double_read;") - tk.MustExec("set @@tidb_enable_clustered_index = 1") - tk.MustExec("drop table if exists t") - - tk.MustExec("create table t (a varchar(64), b varchar(64), uk int, v int, primary key(a, b), unique key uuk(uk));") - tk.MustExec("insert t values ('a', 'a1', 1, 11), ('b', 'b1', 2, 22), ('c', 'c1', 3, 33);") - tk.MustQuery("select * from t use index (uuk);").Check(testkit.Rows("a a1 1 11", "b b1 2 22", "c c1 3 33")) -} - -func (s *testIntegrationSuite) TestIndexJoinOnClusteredIndex(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("set @@tidb_enable_clustered_index = 1") - tk.MustExec("drop table if exists t1") - tk.MustExec("create table t (a int, b varchar(20), c decimal(40,10), d int, primary key(a,b), key(c))") - tk.MustExec(`insert into t values (1,"111",1.1,11), (2,"222",2.2,12), (3,"333",3.3,13)`) - tk.MustExec("analyze table t") - - var input []string - var output []struct { - SQL string - Plan []string - Res []string - } - s.testData.GetTestCases(c, &input, &output) - for i, tt := range input { - s.testData.OnRecord(func() { - output[i].SQL = tt - output[i].Plan = s.testData.ConvertRowsToStrings(tk.MustQuery("explain " + tt).Rows()) - output[i].Res = s.testData.ConvertRowsToStrings(tk.MustQuery(tt).Rows()) - }) - tk.MustQuery("explain " + tt).Check(testkit.Rows(output[i].Plan...)) - tk.MustQuery(tt).Check(testkit.Rows(output[i].Res...)) - } -} - -func (s *testIntegrationSerialSuite) TestExplainAnalyzePointGet(c *C) { - tk := testkit.NewTestKit(c, s.store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t") - tk.MustExec("create table t(a int primary key, b varchar(20))") - tk.MustExec("insert into t values (1,1)") - - res := tk.MustQuery("explain analyze select * from t where a=1;") - checkExplain := func(rpc string) { - resBuff := bytes.NewBufferString("") - for _, row := range res.Rows() { - fmt.Fprintf(resBuff, "%s\n", row) - } - explain := resBuff.String() - c.Assert(strings.Contains(explain, rpc+":{num_rpc:"), IsTrue, Commentf("%s", explain)) - c.Assert(strings.Contains(explain, "total_time:"), IsTrue, Commentf("%s", explain)) - } - checkExplain("Get") - res = tk.MustQuery("explain analyze select * from t where a in (1,2,3);") - checkExplain("BatchGet") -} ->>>>>>> c397584... executor: add runtime information for the batch-point-get executor (#18828)