Skip to content

Commit 31ef4ed

Browse files
stat_user_tables: Add total size metric (#904)
Signed-off-by: David Cook <[email protected]>
1 parent 0b6d986 commit 31ef4ed

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

collector/pg_stat_user_tables.go

+21-3
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,12 @@ var (
150150
[]string{"datname", "schemaname", "relname"},
151151
prometheus.Labels{},
152152
)
153+
statUserTablesTotalSize = prometheus.NewDesc(
154+
prometheus.BuildFQName(namespace, userTableSubsystem, "size_bytes"),
155+
"Total disk space used by this table, in bytes, including all indexes and TOAST data",
156+
[]string{"datname", "schemaname", "relname"},
157+
prometheus.Labels{},
158+
)
153159

154160
statUserTablesQuery = `SELECT
155161
current_database() datname,
@@ -173,7 +179,8 @@ var (
173179
vacuum_count,
174180
autovacuum_count,
175181
analyze_count,
176-
autoanalyze_count
182+
autoanalyze_count,
183+
pg_total_relation_size(relid) as total_size
177184
FROM
178185
pg_stat_user_tables`
179186
)
@@ -191,10 +198,10 @@ func (c *PGStatUserTablesCollector) Update(ctx context.Context, instance *instan
191198
for rows.Next() {
192199
var datname, schemaname, relname sql.NullString
193200
var seqScan, seqTupRead, idxScan, idxTupFetch, nTupIns, nTupUpd, nTupDel, nTupHotUpd, nLiveTup, nDeadTup,
194-
nModSinceAnalyze, vacuumCount, autovacuumCount, analyzeCount, autoanalyzeCount sql.NullInt64
201+
nModSinceAnalyze, vacuumCount, autovacuumCount, analyzeCount, autoanalyzeCount, totalSize sql.NullInt64
195202
var lastVacuum, lastAutovacuum, lastAnalyze, lastAutoanalyze sql.NullTime
196203

197-
if err := rows.Scan(&datname, &schemaname, &relname, &seqScan, &seqTupRead, &idxScan, &idxTupFetch, &nTupIns, &nTupUpd, &nTupDel, &nTupHotUpd, &nLiveTup, &nDeadTup, &nModSinceAnalyze, &lastVacuum, &lastAutovacuum, &lastAnalyze, &lastAutoanalyze, &vacuumCount, &autovacuumCount, &analyzeCount, &autoanalyzeCount); err != nil {
204+
if err := rows.Scan(&datname, &schemaname, &relname, &seqScan, &seqTupRead, &idxScan, &idxTupFetch, &nTupIns, &nTupUpd, &nTupDel, &nTupHotUpd, &nLiveTup, &nDeadTup, &nModSinceAnalyze, &lastVacuum, &lastAutovacuum, &lastAnalyze, &lastAutoanalyze, &vacuumCount, &autovacuumCount, &analyzeCount, &autoanalyzeCount, &totalSize); err != nil {
198205
return err
199206
}
200207

@@ -419,6 +426,17 @@ func (c *PGStatUserTablesCollector) Update(ctx context.Context, instance *instan
419426
autoanalyzeCountMetric,
420427
datnameLabel, schemanameLabel, relnameLabel,
421428
)
429+
430+
totalSizeMetric := 0.0
431+
if totalSize.Valid {
432+
totalSizeMetric = float64(totalSize.Int64)
433+
}
434+
ch <- prometheus.MustNewConstMetric(
435+
statUserTablesTotalSize,
436+
prometheus.GaugeValue,
437+
totalSizeMetric,
438+
datnameLabel, schemanameLabel, relnameLabel,
439+
)
422440
}
423441

424442
if err := rows.Err(); err != nil {

collector/pg_stat_user_tables_test.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ func TestPGStatUserTablesCollector(t *testing.T) {
7171
"vacuum_count",
7272
"autovacuum_count",
7373
"analyze_count",
74-
"autoanalyze_count"}
74+
"autoanalyze_count",
75+
"total_size"}
7576
rows := sqlmock.NewRows(columns).
7677
AddRow("postgres",
7778
"public",
@@ -94,7 +95,8 @@ func TestPGStatUserTablesCollector(t *testing.T) {
9495
11,
9596
12,
9697
13,
97-
14)
98+
14,
99+
15)
98100
mock.ExpectQuery(sanitizeQuery(statUserTablesQuery)).WillReturnRows(rows)
99101
ch := make(chan prometheus.Metric)
100102
go func() {
@@ -170,7 +172,8 @@ func TestPGStatUserTablesCollectorNullValues(t *testing.T) {
170172
"vacuum_count",
171173
"autovacuum_count",
172174
"analyze_count",
173-
"autoanalyze_count"}
175+
"autoanalyze_count",
176+
"total_size"}
174177
rows := sqlmock.NewRows(columns).
175178
AddRow("postgres",
176179
nil,
@@ -193,6 +196,7 @@ func TestPGStatUserTablesCollectorNullValues(t *testing.T) {
193196
nil,
194197
nil,
195198
nil,
199+
nil,
196200
nil)
197201
mock.ExpectQuery(sanitizeQuery(statUserTablesQuery)).WillReturnRows(rows)
198202
ch := make(chan prometheus.Metric)

0 commit comments

Comments
 (0)