[PostgreSQL] – Tamanho das Tabelas no Banco de Dados

PostgreSQL
Em muitos casos é preciso saber o espaço em que as tabelas do banco de dados estão utilizando em disco, para fins de monitoramento e decisão de estruturação de banco. Para tal tarefa no PostgreSQL o comando abaixo resolve o problema.
SELECT esquema, tabela,
       pg_size_pretty(pg_relation_size(esq_tab)) AS tamanho,
       pg_size_pretty(pg_total_relation_size(esq_tab)) AS tamanho_total
  FROM (SELECT tablename AS tabela,
               schemaname AS esquema,
               schemaname||'.'||tablename AS esq_tab
          FROM pg_catalog.pg_tables
         WHERE schemaname NOT
            IN ('pg_catalog', 'information_schema', 'pg_toast') ) AS x
 ORDER BY pg_total_relation_size(esq_tab) DESC;
A coluna tamanho mostra o tamanho que os registros (tuplas) da tabela está ocupando no disco, e a coluna tamanho_total inclui também os TOASTs e os índices associados à tabela.
Com essa consulta, é possível inclusive montar scripts (em shellscript, perl, python, groovy, etc..) de monitoramento do banco, por exemplo: Caso a tabela tal, ou a soma de todas as tabelas chegar a X MB, envie um e-mail de alerta. Outra utilização seria de geração de indicadores para análise de tendência da expansão do banco.
Share

Comments

  1. Avatar for Emerson S. Gaudêncio Rogério Martins : 07/06/2022 at 5:49 pm

    Me ajudou demais!Estava precisando descobri tabelas que mais possuíam registro e com essa query, foi muito achar a table pretendida.

  2. Avatar for Emerson S. Gaudêncio Vagner Rodrigues : 27/03/2023 at 11:33 am

    Acredito que este script aqui ajudará aqueles armazenam dados binários dentro do banco:

    select
    chemaname as table_schema,
    relname as table_name,
    pg_size_pretty(pg_total_relation_size(relid)) as total_size,
    pg_size_pretty(pg_relation_size(relid)) as data_size,
    pg_size_pretty(pg_total_relation_size(relid) – pg_relation_size(relid)) as external_size
    from
    pg_catalog.pg_statio_user_tables
    order by
    pg_total_relation_size(relid) desc,
    pg_relation_size(relid) desc;

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *