From 12436cd03c8c62cf5a7cd1e68aa887ef0da9c609 Mon Sep 17 00:00:00 2001 From: ericqzhao Date: Wed, 24 Nov 2021 11:13:02 +0800 Subject: [PATCH] performance optimization --- app/main.go | 2 ++ common/types.go | 32 +++++++++++++++++++++++++++----- conf.sample.yml | 6 ++++++ go.mod | 1 + go.sum | 1 + 5 files changed, 37 insertions(+), 5 deletions(-) diff --git a/app/main.go b/app/main.go index 7eb0025..e0099ca 100644 --- a/app/main.go +++ b/app/main.go @@ -17,6 +17,8 @@ import ( "github.com/yedf/dtm/dtmcli/dtmimp" "github.com/yedf/dtm/dtmsvr" "github.com/yedf/dtm/examples" + + _ "go.uber.org/automaxprocs" ) var Version, Commit, Date string diff --git a/common/types.go b/common/types.go index c39f5b1..9463318 100644 --- a/common/types.go +++ b/common/types.go @@ -12,6 +12,7 @@ import ( "io/ioutil" "os" "path/filepath" + "strconv" "strings" "sync" "time" @@ -112,6 +113,23 @@ func (op *tracePlugin) Initialize(db *gorm.DB) (err error) { return } +// SetDBConn set db connection conf +func SetDBConn(db *DB) { + sqldb,_ := db.DB.DB() + maxOpenCons, err := strconv.Atoi(DtmConfig.DB["max_open_conns"]) + if err == nil { + sqldb.SetMaxOpenConns(maxOpenCons) + } + maxIdleCons, err := strconv.Atoi(DtmConfig.DB["max_idle_conns"]) + if err == nil { + sqldb.SetMaxIdleConns(maxIdleCons) + } + connMaxLifeTime, err := strconv.ParseInt(DtmConfig.DB["conn_max_life_time"], 10, 64) + if err == nil { + sqldb.SetConnMaxLifetime(time.Duration(connMaxLifeTime) * time.Minute) + } +} + // DbGet get db connection for specified conf func DbGet(conf map[string]string) *DB { dsn := dtmimp.GetDsn(conf) @@ -124,6 +142,7 @@ func DbGet(conf map[string]string) *DB { dtmimp.E2P(err) db1.Use(&tracePlugin{}) db = &DB{DB: db1} + SetDBConn(db.(*DB)) dbs.Store(dsn, db) } return db.(*DB) @@ -153,11 +172,14 @@ func init() { DtmConfig.TimeoutToFail = getIntEnv("TIMEOUT_TO_FAIL", "35") DtmConfig.RetryInterval = getIntEnv("RETRY_INTERVAL", "10") DtmConfig.DB = map[string]string{ - "driver": dtmimp.OrString(os.Getenv("DB_DRIVER"), "mysql"), - "host": os.Getenv("DB_HOST"), - "port": dtmimp.OrString(os.Getenv("DB_PORT"), "3306"), - "user": os.Getenv("DB_USER"), - "password": os.Getenv("DB_PASSWORD"), + "driver": dtmimp.OrString(os.Getenv("DB_DRIVER"), "mysql"), + "host": os.Getenv("DB_HOST"), + "port": dtmimp.OrString(os.Getenv("DB_PORT"), "3306"), + "user": os.Getenv("DB_USER"), + "password": os.Getenv("DB_PASSWORD"), + "max_open_conns": dtmimp.OrString(os.Getenv("DB_MAX_OPEN_CONNS"), "500"), + "max_idle_conns": dtmimp.OrString(os.Getenv("DB_MAX_IDLE_CONNS"), "500"), + "conn_max_life_time": dtmimp.OrString(os.Getenv("DB_CONN_MAX_LIFE_TIME"), "5"), } DtmConfig.DisableLocalhost = getIntEnv("DISABLE_LOCALHOST", "0") DtmConfig.UpdateBranchSync = getIntEnv("UPDATE_BRANCH_SYNC", "0") diff --git a/conf.sample.yml b/conf.sample.yml index f79e598..9a6f85c 100644 --- a/conf.sample.yml +++ b/conf.sample.yml @@ -4,11 +4,17 @@ DB: user: 'root' password: '' port: '3306' + max_open_conns: '500' + max_idle_conns: '500' + conn_max_life_time: '5' # driver: 'postgres' # host: 'localhost' # user: 'postgres' # password: 'mysecretpassword' # port: '5432' + # max_open_conns: 'dbmaxopenconns' + # max_idle_conns: 'dbmaxidleconns' + # conn_max_life_time: 'dbconnmaxlifetime' # the unit of following configurations is second # TransCronInterval: 3 # the interval to poll unfinished global transaction for every dtm process diff --git a/go.mod b/go.mod index 79f1ba0..2b64533 100644 --- a/go.mod +++ b/go.mod @@ -22,5 +22,6 @@ require ( gorm.io/driver/mysql v1.0.3 gorm.io/driver/postgres v1.2.1 gorm.io/gorm v1.22.2 + go.uber.org/automaxprocs v1.4.1-0.20210525221652-0180b04c18a7 // gotest.tools v2.2.0+incompatible ) diff --git a/go.sum b/go.sum index 89eb1a3..e099e42 100644 --- a/go.sum +++ b/go.sum @@ -252,6 +252,7 @@ go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/automaxprocs v1.4.1-0.20210525221652-0180b04c18a7/go.mod h1:/mTEdr7LvHhs0v7mjdxDreTz1OG5zdZGqgOnhWiR/+Q= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=