From ff79cea65e61d2ad92623ac42be6049bc6ebee3c Mon Sep 17 00:00:00 2001 From: ngaut Date: Wed, 18 Nov 2015 11:44:28 +0800 Subject: [PATCH 1/2] compactor: Remove unused parameter --- kv/compactor.go | 2 +- store/localstore/compactor.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/kv/compactor.go b/kv/compactor.go index 47ebd7a619..1687225e82 100644 --- a/kv/compactor.go +++ b/kv/compactor.go @@ -36,5 +36,5 @@ type Compactor interface { // OnDelete is the hook point on Txn.Delete. OnDelete(k Key) // Compact is the function removes the given key. - Compact(ctx interface{}, k Key) error + Compact(k Key) error } diff --git a/store/localstore/compactor.go b/store/localstore/compactor.go index 0d02b0bf0a..3fdea00dfb 100644 --- a/store/localstore/compactor.go +++ b/store/localstore/compactor.go @@ -125,7 +125,7 @@ func (gc *localstoreCompactor) checkExpiredKeysWorker() { gc.mu.Unlock() log.Info("GC trigger") for k := range m { - err := gc.Compact(nil, []byte(k)) + err := gc.Compact([]byte(k)) if err != nil { log.Error(err) } @@ -159,7 +159,7 @@ func (gc *localstoreCompactor) filterExpiredKeys(keys []kv.EncodedKey) []kv.Enco return ret } -func (gc *localstoreCompactor) Compact(ctx interface{}, k kv.Key) error { +func (gc *localstoreCompactor) Compact(k kv.Key) error { keys, err := gc.getAllVersions(k) if err != nil { return errors.Trace(err) From f1aa21580838237f9f828d391070a9d24e65ce6f Mon Sep 17 00:00:00 2001 From: Ewan Chou Date: Wed, 18 Nov 2015 19:30:00 +0800 Subject: [PATCH 2/2] tidb: set session variable when load from global variable. When autocommit is not set by session, we use global variable. Currently it is loaded in every statement, which means we execute a select statement for every statements. The behaviour not only hurts performance, but also is wrong. In MySQL, autocommit is determined when session is created, and it will not be affected when global variable updates. Also added a basic benchmark method to test basic performace test. --- bench_test.go | 30 ++++++++++++++++++++++++++++++ session.go | 1 + 2 files changed, 31 insertions(+) create mode 100644 bench_test.go diff --git a/bench_test.go b/bench_test.go new file mode 100644 index 0000000000..1c29d54bc7 --- /dev/null +++ b/bench_test.go @@ -0,0 +1,30 @@ +package tidb + +import ( + "testing" + + "github.com/ngaut/log" +) + +func BenchmarkBasic(b *testing.B) { + store, err := NewStore("memory://bench") + if err != nil { + b.Fatal(err) + } + log.SetLevel(log.LOG_LEVEL_ERROR) + se, err := CreateSession(store) + if err != nil { + b.Fatal(err) + } + for i := 0; i < b.N; i++ { + rs, err := se.Execute("select 1") + if err != nil { + b.Fatal(err) + } + row, err := rs[0].Next() + if err != nil || row == nil { + b.Fatal(err) + } + rs[0].Close() + } +} diff --git a/session.go b/session.go index 64c7e57ca9..5906ef7abd 100644 --- a/session.go +++ b/session.go @@ -355,6 +355,7 @@ func (s *session) isAutocommit(ctx context.Context) bool { log.Errorf("Get global sys var error: %v", err) return false } + variable.GetSessionVars(ctx).Systems["autocommit"] = autocommit ok = true } if ok && (autocommit == "ON" || autocommit == "on" || autocommit == "1") {