Voltar para todos os artigos
"Sistemas Corporativos"2026-05-23

"Como Otimizar Consultas Slow Queries no PostgreSQL

"Aprenda a analisar o plano de execução de consultas, criar índices eficientes e calibrar a memória compartilhada do PostgreSQL para acelerar seus sistemas.

O banco de dados é frequentemente o maior gargalo de performance de sistemas web corporativos. À medida que o volume de registros na base de dados cresce, consultas SQL mal otimizadas (as chamadas Slow Queries) começam a travar conexões no servidor, elevando o uso de CPU para 100% e gerando lentidão para os usuários finais.

Neste artigo, apresentamos as principais técnicas de engenharia de banco de dados para analisar e otimizar a velocidade de consultas no PostgreSQL.

1. Localizando Slow Queries com pg_stat_statements

O primeiro passo é mapear quais consultas são de fato as vilãs de lentidão da aplicação. Para isso, ativamos a extensão nativa `pg_stat_statements`.

Ativação:

No arquivo de configuração `postgresql.conf`, adicione: ```text shared_preload_libraries = 'pg_stat_statements' ``` Após reiniciar o serviço do banco de dados, você poderá rodar queries analíticas para descobrir quais SQLs consomem mais tempo acumulado de processamento.

2. Decifrando o Plano de Execução com EXPLAIN ANALYZE

Uma vez identificada a query lenta, adicione o prefixo `EXPLAIN ANALYZE` na frente do comando SQL e execute-o.

O PostgreSQL não retornará os dados das linhas, mas sim um relatório detalhado de como o planejador interno executou a busca.

O que procurar no relatório:

  • Seq Scan (Sequential Scan): Indica que o banco de dados teve que ler toda a tabela, linha por linha, no disco. Em tabelas com milhões de registros, isso é catastrófico.
  • Index Scan: Significa que a busca utilizou um índice indexado na memória para achar o registro instantaneamente, que é o cenário ideal.
  • 3. Criando Índices Inteligentes (B-Tree e Índices Compostos)

    Para eliminar os Sequential Scans nas cláusulas `WHERE`, criamos índices nos campos mais buscados.

    Exemplo:

    Se o sistema realiza buscas frequentes combinando `cliente_id` e `data_criacao`: `CREATE INDEX idx_pedidos_cliente_data ON pedidos (cliente_id, data_criacao DESC);`

    *Evite o excesso:* Cada novo índice criado acelera as consultas de leitura (SELECT), mas atrasa as operações de gravação (INSERT/UPDATE), pois o PostgreSQL precisa remontar a árvore de índices a cada alteração de registro.

    4. Calibração de Memória Compartilhada

    A configuração padrão do PostgreSQL é conservadora para rodar em hardware modesto. Para produção, calibre parâmetros fundamentais em seu `postgresql.conf`:

  • `shared_buffers`: Quantidade de memória RAM dedicada para o cache de dados. Configure para 25% a 40% da memória total disponível no servidor.

  • `work_mem`: Memória usada para operações de ordenação interna (ORDER BY, DISTINCT) por conexão. Elevar de forma moderada evita gravação temporária de dados em disco durante ordenações.
  • Conclusão

    Manter um banco de dados saudável exige monitoramento constante do plano de execução e das métricas de memória do servidor. Ao aplicar índices compostos planejados e ajustar as variáveis de buffers do PostgreSQL, sua aplicação corporativa operará de forma muito mais suave e econômica.

    Precisa de suporte especializado em nuvem ou infraestrutura?

    A ExpertCore conta com engenheiros experientes para escalar suas aplicações, automatizar processos e auditar seus custos de TI.

    Explorar Soluções