Browse Source

performance optimization

pull/64/head
ericqzhao 4 years ago
committed by fsdfsffdsf
parent
commit
12436cd03c
  1. 2
      app/main.go
  2. 32
      common/types.go
  3. 6
      conf.sample.yml
  4. 1
      go.mod
  5. 1
      go.sum

2
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

32
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")

6
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

1
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
)

1
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=

Loading…
Cancel
Save