Pārlūkot izejas kodu

MySQL Performance when using GF_DATABASE_URL
Set MaxIdleConn and MaxOpenConn when using the GF_DATABASE_URL configuration. Also added GF_DATABASE_DEBUG flag to print SQL statements and SQL execution times.
See #9784 for the details.

Furtchet 8 gadi atpakaļ
vecāks
revīzija
5fdfa3ff7e

+ 3 - 0
conf/defaults.ini

@@ -82,6 +82,9 @@ max_idle_conn = 2
 # Max conn setting default is 0 (mean not set)
 max_open_conn =
 
+# Set to true to log the sql calls and execution times.
+debug =
+
 # For "postgres", use either "disable", "require" or "verify-full"
 # For "mysql", use either "true", "false", or "skip-verify".
 ssl_mode = disable

+ 2 - 0
conf/sample.ini

@@ -91,6 +91,8 @@
 # Max conn setting default is 0 (mean not set)
 ;max_open_conn =
 
+# Set to true to log the sql calls and execution times.
+debug =
 
 #################################### Session ####################################
 [session]

+ 3 - 0
docs/sources/installation/configuration.md

@@ -224,6 +224,9 @@ The maximum number of connections in the idle connection pool.
 ### max_open_conn
 The maximum number of open connections to the database.
 
+### debug
+Set to `true` to log the sql calls and execution times.
+
 <hr />
 
 ## [security]

+ 10 - 6
pkg/services/sqlstore/sqlstore.go

@@ -158,10 +158,14 @@ func getEngine() (*xorm.Engine, error) {
 	} else {
 		engine.SetMaxOpenConns(DbCfg.MaxOpenConn)
 		engine.SetMaxIdleConns(DbCfg.MaxIdleConn)
-		engine.SetLogger(&xorm.DiscardLogger{})
-		// engine.SetLogger(NewXormLogger(log.LvlInfo, log.New("sqlstore.xorm")))
-		// engine.ShowSQL = true
-		// engine.ShowInfo = true
+		debugSql := setting.Cfg.Section("database").Key("debug").MustBool(false)
+		if !debugSql {
+			engine.SetLogger(&xorm.DiscardLogger{})
+		} else {
+			engine.SetLogger(NewXormLogger(log.LvlInfo, log.New("sqlstore.xorm")))
+			engine.ShowSQL(true)
+			engine.ShowExecTime(true)
+		}
 	}
 	return engine, nil
 }
@@ -190,12 +194,12 @@ func LoadConfig() {
 		DbCfg.Host = sec.Key("host").String()
 		DbCfg.Name = sec.Key("name").String()
 		DbCfg.User = sec.Key("user").String()
-		DbCfg.MaxOpenConn = sec.Key("max_open_conn").MustInt(0)
-		DbCfg.MaxIdleConn = sec.Key("max_idle_conn").MustInt(0)
 		if len(DbCfg.Pwd) == 0 {
 			DbCfg.Pwd = sec.Key("password").String()
 		}
 	}
+	DbCfg.MaxOpenConn = sec.Key("max_open_conn").MustInt(0)
+	DbCfg.MaxIdleConn = sec.Key("max_idle_conn").MustInt(0)
 
 	if DbCfg.Type == "sqlite3" {
 		UseSQLite3 = true