mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-07 08:50:34 -06:00
[no-release-notes] Initialize sysbench statistics, for perf (#8015)
* [no-release-notes] Initialize sysbench statistics, for perf * [ga-format-pr] Run go/utils/repofmt/format_repo.sh and go/Godeps/update.sh * don't match doltgres * tpcc stats exlcudes doltgres also, by default --------- Co-authored-by: max-hoffman <max-hoffman@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
b4dc47360d
commit
0c4df2d519
@@ -21,6 +21,9 @@ import (
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
@@ -146,6 +149,10 @@ func (t *sysbenchTesterImpl) Test(ctx context.Context) (*Result, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := t.collectStats(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
fmt.Println("Running test", t.test.GetName())
|
||||
|
||||
rs, err := t.run(ctx)
|
||||
@@ -155,3 +162,76 @@ func (t *sysbenchTesterImpl) Test(ctx context.Context) (*Result, error) {
|
||||
|
||||
return rs, nil
|
||||
}
|
||||
|
||||
func (t *sysbenchTesterImpl) collectStats(ctx context.Context) error {
|
||||
if !strings.EqualFold(t.serverConfig.GetServerExec(), "dolt") {
|
||||
return nil
|
||||
}
|
||||
db, err := sqlx.Open("mysql", fmt.Sprintf("root:@tcp(%s:%d)/test", t.serverConfig.GetHost(), t.serverConfig.GetPort()))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return collectStats(ctx, db)
|
||||
}
|
||||
|
||||
func collectStats(ctx context.Context, db *sqlx.DB) error {
|
||||
c, err := db.Connx(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
{
|
||||
// configuration, restart, and check needs to be in the same session
|
||||
tx, err := c.BeginTxx(ctx, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := tx.Exec("set @@GLOBAL.dolt_stats_auto_refresh_enabled = 1;"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := tx.Exec("set @@GLOBAL.dolt_stats_auto_refresh_interval = 0;"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := tx.Exec("set @@PERSIST.dolt_stats_auto_refresh_interval = 0;"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := tx.Exec("set @@PERSIST.dolt_stats_auto_refresh_enabled = 1;"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := tx.Exec("call dolt_stats_restart();"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
rows := map[string]interface{}{"cnt": 0}
|
||||
tick := time.NewTicker(5 * time.Second)
|
||||
for {
|
||||
if rows["cnt"] != 0 {
|
||||
fmt.Printf("collected %d histogram buckets\n", rows["cnt"])
|
||||
break
|
||||
}
|
||||
select {
|
||||
case <-tick.C:
|
||||
res, err := tx.Queryx("select count(*) as cnt from dolt_statistics;")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !res.Next() {
|
||||
return fmt.Errorf("failed to set statistics")
|
||||
}
|
||||
if err := res.MapScan(rows); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := res.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if _, err := c.QueryContext(ctx, "call dolt_stats_stop();"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@ import (
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
@@ -56,75 +55,14 @@ func (t *tpccTesterImpl) outputToResult(output []byte) (*Result, error) {
|
||||
}
|
||||
|
||||
func (t *tpccTesterImpl) collectStats(ctx context.Context) error {
|
||||
if !strings.Contains(t.serverConfig.GetServerExec(), "dolt") {
|
||||
if !strings.EqualFold(t.serverConfig.GetServerExec(), "dolt") {
|
||||
return nil
|
||||
}
|
||||
db, err := sqlx.Open("mysql", fmt.Sprintf("root:@tcp(%s:%d)/sbt", t.serverConfig.GetHost(), t.serverConfig.GetPort()))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c, err := db.Connx(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
{
|
||||
// configuration, restart, and check needs to be in the same session
|
||||
tx, err := c.BeginTxx(ctx, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := tx.Exec("set @@GLOBAL.dolt_stats_auto_refresh_enabled = 1;"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := tx.Exec("set @@GLOBAL.dolt_stats_auto_refresh_interval = 0;"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := tx.Exec("set @@PERSIST.dolt_stats_auto_refresh_interval = 0;"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := tx.Exec("set @@PERSIST.dolt_stats_auto_refresh_enabled = 1;"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := tx.Exec("use sbt;"); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := tx.Exec("call dolt_stats_restart();"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
rows := map[string]interface{}{"cnt": 0}
|
||||
tick := time.NewTicker(5 * time.Second)
|
||||
for {
|
||||
if rows["cnt"] != 0 {
|
||||
fmt.Printf("collected %d histogram buckets\n", rows["cnt"])
|
||||
break
|
||||
}
|
||||
select {
|
||||
case <-tick.C:
|
||||
res, err := tx.Queryx("select count(*) as cnt from dolt_statistics;")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !res.Next() {
|
||||
return fmt.Errorf("failed to set statistics")
|
||||
}
|
||||
if err := res.MapScan(rows); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := res.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if _, err := c.QueryContext(ctx, "call dolt_stats_stop();"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
return collectStats(ctx, db)
|
||||
}
|
||||
|
||||
func (t *tpccTesterImpl) prepare(ctx context.Context) error {
|
||||
|
||||
Reference in New Issue
Block a user