Saltar al contenido
DBAExperts
PostgreSQL Operación

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. 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. 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. 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 $550

Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.