Listar el tamaño de las tablas desglosado en heap / índices / TOAST, y los índices más grandes
PostgreSQLAlmacenamientoComando
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;Qué hace
Muestra las tablas más grandes desglosadas en total, heap, índices y TOAST (+FSM/VM) con su porcentaje de la base de datos; y los índices más grandes con su número de scans y los indicadores unique/primary.
Cuándo usarlo
Para averiguar de dónde viene el crecimiento (datos, índices o TOAST) cuando aumenta el uso de disco, y para detectar índices grandes sin uso.
Precaución
Las funciones de tamaño acceden al sistema de archivos para cada relación y pueden ser lentas en bases de datos con decenas de miles de tablas. Un padre particionado (relkind 'p') ocupa 0 bytes por sí mismo y se excluye; para el total de una jerarquía: SELECT pg_size_pretty(sum(pg_total_relation_size(relid))) FROM pg_partition_tree('sales'); Los índices grandes con idx_scan = 0 son candidatos a eliminarse, pero los contadores solo cubren el tiempo desde el último reset de estadísticas y solo este servidor (el uso en las réplicas no es visible); los índices unique/primary imponen restricciones y no se eliminan.