Eu tenho uma tabela muito grande, com campos blob, chamada data
. Tentei descobrir por que não está bem armazenado em cache e os SELECT
s repetidos são bastante lentos:
=> SELECT pg_size_pretty(pg_total_relation_size('data'));
157 GB
Isso parecia um pouco grande, então tentei resumir os dados:
=> SELECT pg_size_pretty(pg_relation_size('data'));
19 GB
Com os índices:
SELECT pg_size_pretty(pg_relation_size('data_pkey'));
757 MB
SELECT pg_size_pretty(pg_relation_size('data_file_end_date_idx'));
766 MB
SELECT pg_size_pretty(pg_relation_size('data_file_end_date_idx'));
766 MB
SELECT pg_size_pretty(pg_relation_size('data_merged_idx'));
854 MB
SELECT pg_size_pretty(pg_relation_size('data_owner_idx'));
794 MB
SELECT pg_size_pretty(pg_relation_size('data_session_format_idx'));
779 MB
A soma do tamanho dos dados e índices é de cerca de 26 GB, mas o tamanho total da relação é próximo a 160 GB. A tabela foi restaurada do dump há pouco tempo e nenhuma gravação foi feita desde então.
- Qual a explicação para essa diferença?
- Qualquer maneira de reduzir o espaço em disco desperdiçado? O agrupamento ajudará?
A tabela tem alguma coluna de largura variável? Se a resposta for sim, você provavelmente perdeu as mesas do brinde (pg_toast_xxx). Você precisa encontrar seus nomes (não sabe como fazer isso, precisa pesquisar no Google) e calcular seu tamanho também.
Para reduzir o espaço (por exemplo, após excluir várias linhas), execute VACUUM FULL e reindexe a tabela depois dela (para evitar a fragmentação do índice).
Esta consulta também inclui
toast
tabelas e índices: