Cómo monitorear el tamaño y el crecimiento de una base en PostgreSQL
Saber cuánto ocupa cada base y qué tablas crecen más te permite anticipar problemas de disco y detectar tablas infladas (bloat) antes de que duelan.
- 1
Mide el tamaño de cada base del clúster
pg_database_size devuelve bytes; pg_size_pretty los formatea a un tamaño legible. Ordena para ver cuál base pesa más.
SELECT datname, pg_size_pretty(pg_database_size(datname)) AS tamano FROM pg_database ORDER BY pg_database_size(datname) DESC; - 2
Encuentra las tablas más grandes
pg_total_relation_size incluye la tabla, sus índices y los datos TOAST. Es la medida real de lo que ocupa una tabla en disco.
SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) AS total FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC LIMIT 10; - 3
Separa el peso de la tabla y el de sus índices
A veces el problema no son los datos sino índices sobredimensionados. Compara pg_table_size con pg_indexes_size.
SELECT relname, pg_size_pretty(pg_table_size(relid)) AS tabla, pg_size_pretty(pg_indexes_size(relid)) AS indices FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC LIMIT 10;
// el error común
Que una tabla crezca no siempre significa más datos: el bloat por filas muertas la infla aunque el número de registros no suba. Si el tamaño sube pero los conteos no, revisa el autovacuum antes de comprar más disco.
// cuándo conviene un experto
Cuando el crecimiento empieza a comprometer el disco o el rendimiento, conviene distinguir entre datos reales, bloat e índices inútiles. En dba.mx montamos monitoreo de crecimiento con alertas y un plan de capacidad para que no te tome por sorpresa.
Agenda un Escaneo — desde USD $550Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.