Os perigos ocultos de manter tabelas em excesso no PostgreSQL
Aprofundamento CEVIU
Aprofundamento
O raster_overviews é uma view de metadados do PostGIS que lista informações sobre visões agregadas de dados raster, como pirâmides de resolução reduzida usadas em mapas e análise espacial. Ela depende diretamente de catálogos do sistema PostgreSQL (pg_class, pg_attribute, pg_namespace, entre outros) para construir seu resultado. Quando há dezenas de milhares de tabelas, esses catálogos explodem em tamanho: cada tabela gera múltiplas entradas nessas tabelas do sistema (por colunas, índices, constraints), e a view acaba varrendo milhões de linhas de metadados em tempo de execução, mesmo que o dado raster propriamente dito seja pequeno.
Isso não é um bug no PostGIS, nem na view em si: é uma consequência direta da arquitetura de catálogo do PostgreSQL, que carrega metadados em memória de forma não limitada por conexão. A performance cai não por causa da lógica da query, mas porque o planejador precisa ler, analisar e unir milhares de registros de sistema antes de montar o plano, e isso se repete a cada execução, sem cache eficiente para esse tipo de consulta em escala extrema.
O que mudou
A cobertura anterior do CEVIU já havia alertado que cenários de borda, como esquemas com milhares de objetos, tendem a emergir como gargalos silenciosos artigo original. Agora, a nova análise confirma que o problema não é teórico: foi observado em produção, com impacto real em memória (até 500 MB por conexão no CacheMemoryContext) e downtime de upgrade. Antes era um caso hipotético de 'excesso de objetos'; agora é um diagnóstico com evidências técnicas, experimentos reprodutíveis e solução prática, eliminar tabelas, não só otimizar queries.
Por que isso importa
Para engenheiros de dados que projetam multi-tenancy com schema-per-tenant ou pipelines que geram tabelas dinâmicas (ex: ingestão por partição temporal ou por fonte), esse é um limite físico do PostgreSQL, não um ajuste de configuração. Diferente do bloat ou do vacuuming, que podem ser mitigados com rotinas, o crescimento do catálogo é linear com o número de objetos e afeta operações fundamentais: planejamento de consultas, upgrades com pg_upgrade, inicialização de conexões e até o próprio autovacuum. Ignorar isso leva a degradações progressivas, difíceis de correlacionar com a causa raiz.
Linha do tempo
CEVIU publica artigo sobre bloat como característica de design do PostgreSQL
CEVIU analisa degradação de filas Postgres por acúmulo de dead tuples
CEVIU alerta sobre riscos de ignorar cenários de borda no modelo de dados
CEVIU explica por que DELETE não escala em grandes volumes no PostgreSQL
Nova análise mostra impacto real de excesso de tabelas no catálogo e no raster_overviews
Perguntas frequentes
O raster_overviews é um componente crítico do PostGIS? Posso desativá-lo?
Não é crítico para o funcionamento básico do PostGIS, mas é usado por ferramentas de visualização e APIs geoespaciais que dependem de metadados de raster. Desativá-lo não é possível, é uma view pública. A solução é reduzir a carga nos catálogos que ela consulta, não removê-la.
Quantas tabelas são 'muitas' no PostgreSQL?
Não há um número fixo, mas problemas começam a aparecer consistentemente acima de 10 mil tabelas por banco. O artigo mostra impacto claro com 20 mil tabelas, e isso inclui objetos derivados como colunas, índices e constraints, que multiplicam o volume nos catálogos.
DROP TABLE resolve o problema imediatamente?
Sim, mas com ressalvas: o cache do catálogo (CacheMemoryContext) não é limpo automaticamente após o DROP. É necessário reiniciar a conexão ou forçar pg_reload_conf() em alguns casos. Para conexões longas (ex: aplicações com connection pooling), o efeito só aparece após reconexão.
Particionamento declarativo resolve o problema de muitas tabelas?
Não, ele troca muitas tabelas por uma única tabela com muitas partições físicas. As partições ainda geram entradas em pg_class e pg_attribute, então o impacto no catálogo permanece. O ideal é consolidar lógica em menos tabelas, não apenas renomear o problema.
Fontes
- cybertec-postgresql.comfonte original
- Categoria
- CEVIU Dados
- Publicado
- 03 de julho de 2026
- Editoria
- CEVIU Dados
