Skip to content
This repository was archived by the owner on Nov 28, 2022. It is now read-only.

Commit b280d11

Browse files
committed
Add indexes scans metric
1 parent 343b1fc commit b280d11

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

gauges/indexes.go

+37
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,43 @@ import (
66
"github.com/prometheus/client_golang/prometheus"
77
)
88

9+
type indexScans struct {
10+
Table string `db:"relname"`
11+
Index string `db:"indexrelname"`
12+
IdxScan float64 `db:"idx_scan"`
13+
}
14+
15+
// IndexesScans returns the number of index scans initiated on a index
16+
func (g *Gauges) IndexesScans() *prometheus.GaugeVec {
17+
var gauge = prometheus.NewGaugeVec(
18+
prometheus.GaugeOpts{
19+
Name: "postgresql_indexes_scans_total",
20+
Help: "Number of index scans initiated on a index",
21+
ConstLabels: g.labels,
22+
},
23+
[]string{"table", "index"},
24+
)
25+
26+
const indexesScansQuery = "SELECT relname, indexrelname, idx_scan FROM pg_stat_user_indexes"
27+
28+
go func() {
29+
for {
30+
var indexes []indexScans
31+
if err := g.query(indexesScansQuery, &indexes, emptyParams); err == nil {
32+
for _, index := range indexes {
33+
gauge.With(prometheus.Labels{
34+
"table": index.Table,
35+
"index": index.Index,
36+
}).Set(index.IdxScan)
37+
}
38+
}
39+
time.Sleep(g.interval)
40+
}
41+
}()
42+
43+
return gauge
44+
}
45+
946
// UnusedIndexes returns the count of unused indexes in the database
1047
func (g *Gauges) UnusedIndexes() prometheus.Gauge {
1148
return g.new(

main.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,11 @@ func watch(db *sql.DB, reg prometheus.Registerer, name string) {
8686
reg.MustRegister(gauges.DeadTuples())
8787
reg.MustRegister(gauges.HeapBlocksHit())
8888
reg.MustRegister(gauges.HeapBlocksRead())
89-
reg.MustRegister(gauges.IndexBloat())
89+
reg.MustRegister(gauges.IndexesScans())
90+
reg.MustRegister(gauges.UnusedIndexes())
9091
reg.MustRegister(gauges.IndexBlocksHit())
9192
reg.MustRegister(gauges.IndexBlocksRead())
93+
reg.MustRegister(gauges.IndexBloat())
9294
reg.MustRegister(gauges.Locks())
9395
reg.MustRegister(gauges.NotGrantedLocks())
9496
reg.MustRegister(gauges.DeadLocks())
@@ -103,7 +105,6 @@ func watch(db *sql.DB, reg prometheus.Registerer, name string) {
103105
reg.MustRegister(gauges.TempFiles())
104106
reg.MustRegister(gauges.TempSize())
105107
reg.MustRegister(gauges.TransactionsSum())
106-
reg.MustRegister(gauges.UnusedIndexes())
107108
reg.MustRegister(gauges.Up())
108109
reg.MustRegister(gauges.TableScans())
109110
reg.MustRegister(gauges.TableSizes())

0 commit comments

Comments
 (0)