[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:
Maximilian Hoffman
2024-06-20 15:45:47 -07:00
committed by GitHub
parent b4dc47360d
commit 0c4df2d519
2 changed files with 82 additions and 64 deletions

View File

@@ -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
}

View File

@@ -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 {