[PostgreSQL] – Tamanho das Tabelas no Banco de Dados
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.
1 2 3 4 5 6 7 8 9 10 | 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.
Me ajudou demais!Estava precisando descobri tabelas que mais possuíam registro e com essa query, foi muito achar a table pretendida.
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;