1
0
mirror of https://github.com/golang/go synced 2024-11-19 12:14:42 -07:00

database/sql: provide stats on number of open connections to the database.

This change provides a convenient way to monitor database connection pool.

Change-Id: I4b3757855b43f3b254acf9312e2a16e2f87840d0
Reviewed-on: https://go-review.googlesource.com/7950
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
Andrei Korzhevskii 2015-03-23 18:23:53 +03:00 committed by Brad Fitzpatrick
parent 9d0239771a
commit 297c1d297f
2 changed files with 36 additions and 0 deletions

View File

@ -572,6 +572,22 @@ func (db *DB) SetMaxOpenConns(n int) {
} }
} }
// DBStats contains database statistics.
type DBStats struct {
// OpenConnections is the number of open connections to the database.
OpenConnections int
}
// Stats returns database statistics.
func (db *DB) Stats() DBStats {
db.mu.Lock()
stats := DBStats{
OpenConnections: db.numOpen,
}
db.mu.Unlock()
return stats
}
// Assumes db.mu is locked. // Assumes db.mu is locked.
// If there are connRequests and the connection limit hasn't been reached, // If there are connRequests and the connection limit hasn't been reached,
// then tell the connectionOpener to open new connections. // then tell the connectionOpener to open new connections.

View File

@ -1093,6 +1093,26 @@ func TestSingleOpenConn(t *testing.T) {
} }
} }
func TestStats(t *testing.T) {
db := newTestDB(t, "people")
stats := db.Stats()
if got := stats.OpenConnections; got != 1 {
t.Errorf("stats.OpenConnections = %d; want 1", got)
}
tx, err := db.Begin()
if err != nil {
t.Fatal(err)
}
tx.Commit()
closeDB(t, db)
stats = db.Stats()
if got := stats.OpenConnections; got != 0 {
t.Errorf("stats.OpenConnections = %d; want 0", got)
}
}
// golang.org/issue/5323 // golang.org/issue/5323
func TestStmtCloseDeps(t *testing.T) { func TestStmtCloseDeps(t *testing.T) {
if testing.Short() { if testing.Short() {