mirror of
https://github.com/jackc/pgx.git
synced 2025-05-23 07:52:03 +00:00
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:
parent
d857f18454
commit
a8f5ce12c5
26
conn.go
26
conn.go
@ -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{}) {}
|
||||
|
4
query.go
4
query.go
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user