diff --git a/go/performance/scripts/local_sysbench.sh b/go/performance/scripts/local_sysbench.sh index 899ab41909..7769b64172 100755 --- a/go/performance/scripts/local_sysbench.sh +++ b/go/performance/scripts/local_sysbench.sh @@ -69,13 +69,14 @@ listener: read_timeout_millis: 28800000 write_timeout_millis: 28800000 -databases: - - name: "sbtest" - path: "." +data_dir: . YAML # start a server +mkdir sbtest +cd sbtest dolt init +cd .. dolt sql-server --config="dolt-config.yaml" 2> prepare.log & SERVER_PID="$!" @@ -120,6 +121,8 @@ sysbench \ --mysql-user="user" \ --mysql-password="pass" \ --db-ps-mode=disable \ + --time=30 \ + --db-ps-mode=disable \ "$SYSBENCH_TEST" run unset DOLT_ENABLE_CHUNK_JOURNAL diff --git a/go/performance/sysbench/README.md b/go/performance/sysbench/README.md new file mode 100644 index 0000000000..eaad022b74 --- /dev/null +++ b/go/performance/sysbench/README.md @@ -0,0 +1,5 @@ +# Sysbench + +MySQL tests expect local server (ex: `mysqld --port 3309 --local-infile=1 --socket=/tmp/mysqld2.sock`). + +Interrupting a test midway can create cause "table already exists" error. \ No newline at end of file diff --git a/go/performance/sysbench/cmd/main.go b/go/performance/sysbench/cmd/main.go index 3fe7c57140..77f6769799 100644 --- a/go/performance/sysbench/cmd/main.go +++ b/go/performance/sysbench/cmd/main.go @@ -56,7 +56,6 @@ func main() { results := new(sysbench.Results) u, err := driver.NewDoltUser() for _, test := range defs.Tests { - test.Results = results test.InitWithTmpDir(tmpdir) for _, r := range test.Repos { @@ -72,8 +71,8 @@ func main() { if err != nil { log.Fatalln(err) } - results.Append(test.Results.Res...) } + results.Append(test.Results.Res...) } if *out != "" { of, err := os.Create(*out) diff --git a/go/performance/sysbench/reporting/systab.sql b/go/performance/sysbench/reporting/systab.sql index aa80dc26b1..08b0ed2fb2 100644 --- a/go/performance/sysbench/reporting/systab.sql +++ b/go/performance/sysbench/reporting/systab.sql @@ -1,13 +1,14 @@ -select name, mean, mean_mult +select name, detail, mean_mult from ( select round(first_value(avg) over w, 2) as mean, trim(TRAILING '.gen.lua' FROM trim(LEADING 'gen/' FROM test_name)) as name, + detail, round(avg / lead(avg) over w, 2) as mean_mult, round(median / lead(median) over w, 2) as med_mult, round(sqrt(power(first_value(stdd) over w, 2) + power(last_value(stdd) over w, 2)), 3) as stdd, row_number() over w as rn from sysbench_results having mod(rn,2) = 1 - window w as (order by test_name rows between CURRENT ROW and 1 following) + window w as (order by test_name, detail rows between CURRENT ROW and 1 following) ) sq; diff --git a/go/performance/sysbench/testdata/default-config.yaml b/go/performance/sysbench/testdata/default-config.yaml index 74e15ecb79..97188f49c2 100644 --- a/go/performance/sysbench/testdata/default-config.yaml +++ b/go/performance/sysbench/testdata/default-config.yaml @@ -9,3 +9,4 @@ randType: uniform eventCnt: 1500 time: 120 histogram: true +prepared: true diff --git a/go/performance/sysbench/testdata/index-join-scan.yaml b/go/performance/sysbench/testdata/index-join-scan.yaml new file mode 100644 index 0000000000..825e8973ea --- /dev/null +++ b/go/performance/sysbench/testdata/index-join-scan.yaml @@ -0,0 +1,9 @@ +tests: + - name: "index scan join" + repos: + - name: dolt + server: + port: 3309 + args: [ "--port", "3309", "--password", "password"] + scripts: + - index_join_scan.lua \ No newline at end of file diff --git a/go/performance/sysbench/testdata/read-write.yaml b/go/performance/sysbench/testdata/read-write.yaml index 540af580b9..4b4fca306a 100644 --- a/go/performance/sysbench/testdata/read-write.yaml +++ b/go/performance/sysbench/testdata/read-write.yaml @@ -1,5 +1,5 @@ tests: - - name: "read" + - name: "read_prepared" repos: - name: dolt server: @@ -11,10 +11,10 @@ tests: host: 127.0.0.1 user: root password: - port: 3309 + port: 3308 scripts: - covering_index_scan.lua - - groupby_scan.lua +# - groupby_scan.lua - index_join.lua - index_join_scan.lua - index_scan.lua @@ -24,24 +24,24 @@ tests: - select_random_ranges - table_scan.lua - types_table_scan.lua - - name: "write" - repos: - - name: dolt - server: - port: 3308 - args: [ "--port", "3308" ] - - name: mysql - external-server: - name: test - host: 127.0.0.1 - user: root - password: - port: 3309 - scripts: - - oltp_delete_insert.lua - - oltp_insert - - oltp_read_write - - oltp_update_index - - oltp_update_non_index - - oltp_write_only - - types_delete_insert.lua \ No newline at end of file +# - name: "write" +# repos: +# - name: dolt +# server: +# port: 3309 +# args: [ "--port", "3309", "--password", "password"] +# - name: mysql +# external-server: +# name: test +# host: 127.0.0.1 +# user: root +# password: +# port: 3308 +# scripts: +# - oltp_delete_insert.lua +# - oltp_insert +# - oltp_read_write +# - oltp_update_index +# - oltp_update_non_index +# - oltp_write_only +# - types_delete_insert.lua \ No newline at end of file diff --git a/go/performance/sysbench/testdef.go b/go/performance/sysbench/testdef.go index 01a65ae754..0e147a5d8e 100644 --- a/go/performance/sysbench/testdef.go +++ b/go/performance/sysbench/testdef.go @@ -55,6 +55,7 @@ type Config struct { Histogram bool `yaml:"histogram"` ScriptDir string `yaml:"scriptDir"` Verbose bool `yaml:"verbose"` + Prepared bool `yaml:"prepared"` } func (c Config) WithScriptDir(dir string) Config { @@ -67,6 +68,11 @@ func (c Config) WithVerbose(v bool) Config { return c } +func (c Config) WithPrepared(v bool) Config { + c.Prepared = v + return c +} + func (c Config) AsOpts() []string { var ret []string if c.DbDriver != "" { @@ -93,6 +99,9 @@ func (c Config) AsOpts() []string { if c.Time > 0 { ret = append(ret, fmt.Sprintf("--time=%s", strconv.Itoa(c.Time))) } + if c.Prepared { + ret = append(ret, fmt.Sprint("--db-ps-mode=auto")) + } ret = append(ret, fmt.Sprintf("--rand-seed=%s", strconv.Itoa(c.Seed)), fmt.Sprintf("--table-size=%s", strconv.Itoa(c.TableSize)), @@ -463,21 +472,30 @@ func modifyServerForImport(db *sql.DB) error { // RunExternalServerTests connects to a single externally provided server to run every test func (test *Script) RunExternalServerTests(repoName string, s *driver.ExternalServer, conf Config) error { + conf.Port = strconv.Itoa(s.Port) + conf.Password = s.Password return test.IterSysbenchScripts(conf, test.Scripts, func(script string, prep, run, clean *exec.Cmd) error { + log.Printf("starting scipt: %s", script) + db, err := driver.ConnectDB(s.User, s.Password, s.Name, s.Host, s.Port, nil) if err != nil { return err } defer db.Close() + defer clean.Run() + buf := new(bytes.Buffer) + prep.Stdout = buf if err := prep.Run(); err != nil { + log.Println(buf) return err } - buf := new(bytes.Buffer) + buf = new(bytes.Buffer) run.Stdout = buf err = run.Run() if err != nil { + log.Println(buf) return err } @@ -497,6 +515,7 @@ func (test *Script) RunExternalServerTests(repoName string, s *driver.ExternalSe // RunSqlServerTests creates a new repo and server for every import test. func (test *Script) RunSqlServerTests(repo driver.TestRepo, user driver.DoltUser, conf Config) error { return test.IterSysbenchScripts(conf, test.Scripts, func(script string, prep, run, clean *exec.Cmd) error { + log.Printf("starting scipt: %s", script) //make a new server for every test server, err := newServer(user, repo, conf) if err != nil { @@ -522,7 +541,7 @@ func (test *Script) RunSqlServerTests(repo driver.TestRepo, user driver.DoltUser run.Stdout = buf err = run.Run() if err != nil { - fmt.Println(buf) + log.Println(buf) return err } @@ -535,9 +554,9 @@ func (test *Script) RunSqlServerTests(repo driver.TestRepo, user driver.DoltUser } test.Results.Append(r) - if conf.Verbose { - return nil - } + //if conf.Verbose { + // return nil + //} return clean.Run() }) }