Trying to reduce memory allocation. logQueryArgs is called even when
using the default discardLogger. This allocates quite a bit of memory. Created a default dlogger instance and avoid logging code when that's our logger. I couldn't think of a better implementation without touching the Logger interface. On 100 000 inserts, this brought the allocation down to 58MB from 122MB. It should also result in some small performance gains.
This commit is contained in:
@@ -99,7 +99,7 @@ func Connect(config ConnConfig) (c *Conn, err error) {
|
||||
if c.config.Logger != nil {
|
||||
c.logger = c.config.Logger
|
||||
} else {
|
||||
c.logger = &discardLogger{}
|
||||
c.logger = dlogger
|
||||
}
|
||||
|
||||
if c.config.User == "" {
|
||||
@@ -190,8 +190,10 @@ func Connect(config ConnConfig) (c *Conn, err error) {
|
||||
}
|
||||
case readyForQuery:
|
||||
c.rxReadyForQuery(r)
|
||||
c.logger = &connLogger{logger: c.logger, pid: c.Pid}
|
||||
c.logger.Info("Connection established")
|
||||
if c.logger != dlogger {
|
||||
c.logger = &connLogger{logger: c.logger, pid: c.Pid}
|
||||
c.logger.Info("Connection established")
|
||||
}
|
||||
|
||||
err = c.loadPgTypes()
|
||||
if err != nil {
|
||||
@@ -640,14 +642,16 @@ func (c *Conn) Exec(sql string, arguments ...interface{}) (commandTag CommandTag
|
||||
startTime := time.Now()
|
||||
c.lastActivityTime = startTime
|
||||
|
||||
defer func() {
|
||||
if err == nil {
|
||||
endTime := time.Now()
|
||||
c.logger.Info("Exec", "sql", sql, "args", logQueryArgs(arguments), "time", endTime.Sub(startTime), "commandTag", commandTag)
|
||||
} else {
|
||||
c.logger.Error("Exec", "sql", sql, "args", logQueryArgs(arguments), "error", err)
|
||||
}
|
||||
}()
|
||||
if c.logger != dlogger {
|
||||
defer func() {
|
||||
if err == nil {
|
||||
endTime := time.Now()
|
||||
c.logger.Info("Exec", "sql", sql, "args", logQueryArgs(arguments), "time", endTime.Sub(startTime), "commandTag", commandTag)
|
||||
} else {
|
||||
c.logger.Error("Exec", "sql", sql, "args", logQueryArgs(arguments), "error", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
if err = c.sendQuery(sql, arguments...); err != nil {
|
||||
return
|
||||
|
||||
@@ -19,6 +19,9 @@ type Logger interface {
|
||||
|
||||
type discardLogger struct{}
|
||||
|
||||
// default discardLogger instance
|
||||
var dlogger = &discardLogger{}
|
||||
|
||||
func (l *discardLogger) Debug(msg string, ctx ...interface{}) {}
|
||||
func (l *discardLogger) Info(msg string, ctx ...interface{}) {}
|
||||
func (l *discardLogger) Warn(msg string, ctx ...interface{}) {}
|
||||
|
||||
@@ -68,6 +68,10 @@ func (rows *Rows) close() {
|
||||
|
||||
rows.closed = true
|
||||
|
||||
if rows.logger == dlogger {
|
||||
return
|
||||
}
|
||||
|
||||
if rows.err == nil {
|
||||
endTime := time.Now()
|
||||
rows.logger.Info("Query", "sql", rows.sql, "args", logQueryArgs(rows.args), "time", endTime.Sub(rows.startTime), "rowCount", rows.rowCount)
|
||||
|
||||
Reference in New Issue
Block a user