@@ -150,6 +150,12 @@ var (
150
150
[]string {"datname" , "schemaname" , "relname" },
151
151
prometheus.Labels {},
152
152
)
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
+ )
153
159
154
160
statUserTablesQuery = `SELECT
155
161
current_database() datname,
@@ -173,7 +179,8 @@ var (
173
179
vacuum_count,
174
180
autovacuum_count,
175
181
analyze_count,
176
- autoanalyze_count
182
+ autoanalyze_count,
183
+ pg_total_relation_size(relid) as total_size
177
184
FROM
178
185
pg_stat_user_tables`
179
186
)
@@ -191,10 +198,10 @@ func (c *PGStatUserTablesCollector) Update(ctx context.Context, instance *instan
191
198
for rows .Next () {
192
199
var datname , schemaname , relname sql.NullString
193
200
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
195
202
var lastVacuum , lastAutovacuum , lastAnalyze , lastAutoanalyze sql.NullTime
196
203
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 {
198
205
return err
199
206
}
200
207
@@ -419,6 +426,17 @@ func (c *PGStatUserTablesCollector) Update(ctx context.Context, instance *instan
419
426
autoanalyzeCountMetric ,
420
427
datnameLabel , schemanameLabel , relnameLabel ,
421
428
)
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
+ )
422
440
}
423
441
424
442
if err := rows .Err (); err != nil {
0 commit comments