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:
parent
9d0239771a
commit
297c1d297f
@ -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.
|
||||||
|
@ -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() {
|
||||||
|
Loading…
Reference in New Issue
Block a user