Tabellengröße aufgeschlüsselt nach Heap / Index / TOAST und die größten Indizes auflisten
PostgreSQLSpeicherBefehl
SELECT n.nspname AS schema_name,
c.relname AS table_name,
pg_size_pretty(pg_total_relation_size(c.oid)) AS total,
pg_size_pretty(pg_relation_size(c.oid)) AS heap,
pg_size_pretty(pg_indexes_size(c.oid)) AS indexes,
pg_size_pretty(pg_total_relation_size(c.oid) - pg_relation_size(c.oid) - pg_indexes_size(c.oid)) AS toast_fsm_vm,
round(100.0 * pg_total_relation_size(c.oid) / NULLIF(pg_database_size(current_database()), 0), 1) AS pct_of_db
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r', 'm')
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
ORDER BY pg_total_relation_size(c.oid) DESC
LIMIT 20;
-- Largest indexes and their usage counts
SELECT s.schemaname,
s.relname AS table_name,
s.indexrelname AS index_name,
pg_size_pretty(pg_relation_size(s.indexrelid)) AS index_size,
s.idx_scan,
i.indisunique,
i.indisprimary
FROM pg_stat_user_indexes s
JOIN pg_index i ON i.indexrelid = s.indexrelid
ORDER BY pg_relation_size(s.indexrelid) DESC
LIMIT 20;Was es tut
Zeigt die größten Tabellen aufgeschlüsselt nach Gesamt, Heap, Index und TOAST (+FSM/VM) mit ihrem Anteil an der Datenbank; und die größten Indizes mit Scan-Zahlen und Unique-/Primary-Kennzeichen.
Wann einsetzen
Um bei steigender Plattennutzung herauszufinden, woher das Wachstum kommt (Daten, Indizes oder TOAST), und um große ungenutzte Indizes zu entdecken.
Vorsicht
Größenfunktionen greifen für jede Relation auf das Dateisystem zu und können in Datenbanken mit Zehntausenden Tabellen langsam sein. Eine partitionierte Parent-Tabelle (relkind 'p') hat selbst 0 Bytes und wird ausgeschlossen; für die Summe einer Hierarchie: SELECT pg_size_pretty(sum(pg_total_relation_size(relid))) FROM pg_partition_tree('sales'); Große Indizes mit idx_scan = 0 sind Kandidaten zum Löschen, aber die Zähler decken nur die Zeit seit dem letzten Statistik-Reset und nur diesen Server ab (Nutzung auf Replicas ist nicht sichtbar); Unique-/Primary-Indizes erzwingen Constraints und werden nicht gelöscht.