Como Otimizar a Performance do PostgreSQL

Descubra as melhores práticas para otimizar o desempenho do PostgreSQL. Aprenda a ajustar parâmetros essenciais como conexões simultâneas, consultas paralelas e cache para melhorar a performance do banco de dados e garantir uma aplicação eficiente e rápida.

Compartilhe:

O PostgreSQL é um dos bancos de dados relacionais mais utilizados por desenvolvedores e empresas em todo o mundo, conhecido pela sua robustez, flexibilidade e eficiência. No entanto, para garantir que ele funcione em sua máxima capacidade, é essencial ajustar certos parâmetros e configurar o ambiente de forma adequada. Neste artigo, vamos abordar algumas configurações e comandos essenciais que podem ajudar você a otimizar o desempenho do PostgreSQL, garantindo melhor resposta e uso eficiente dos recursos do servidor.

Vamos utilizar bastante o comando ALTER SYSTEM no PostgreSQL, pois este permite a alteração de parâmetros de configuração diretamente no banco de dados, sem a necessidade de editar o arquivo postgresql.conf manualmente. Isso facilita o ajuste de variáveis importantes para melhorar a performance, segurança e estabilidade do sistema. Este artigo detalha o uso do comando ALTER SYSTEM, explora os principais parâmetros que você pode configurar e fornece dicas para obter o melhor desempenho com ajustes otimizados.

O Que é o Comando ALTER SYSTEM?

O comando ALTER SYSTEM permite modificar parâmetros de configuração globalmente, aplicando mudanças que impactam o servidor PostgreSQL como um todo. Após a execução do comando, as configurações alteradas ficam salvas no arquivo postgresql.auto.conf, que é gerado automaticamente e tem prioridade sobre o arquivo postgresql.conf. Esse comando é muito útil para ambientes em que ajustes frequentes de configuração são necessários e para otimizar operações sem intervenções manuais no servidor.

Sintaxe Básica do ALTER SYSTEM

A sintaxe básica do ALTER SYSTEM é:

ALTER SYSTEM SET parameter_name = value;

Para aplicar a alteração, é necessário recarregar o serviço PostgreSQL. Você pode fazer isso com o comando SQL:

Abre em nova aba

SELECT pg_reload_conf();

Esse comando permite que o PostgreSQL carregue as novas configurações sem necessidade de reiniciar o serviço,economizando tempo e reduzindo o tempo de inatividade.

Mas o objetivo deste tutorial é a otimização de consultas no PostgreSQL e,para isso,vamos explicar de forma direta os comandos SQL para otimização,utilizando o ALTER SYSTEM.

1. Controle de Conexões no PostgreSQL

Uma das primeiras configurações a se considerar ao otimizar o PostgreSQL é o controle de conexões simultâneas. Por padrão,o PostgreSQL aceita um número limitado de conexões,mas essa quantidade pode ser ajustada para atender à demanda da aplicação.

Para visualizar o limite atual de conexões,você pode usar o comando:

show max_connections;

Esse comando retorna o valor configurado de max_connections,que representa o número máximo de conexões que o banco de dados aceita ao mesmo tempo.

Para alterar esse limite,utilize:

alter system set max_connections=300;

Configurar um valor adequado para max_connectionsé essencial,pois muitas conexões simultâneas podem consumir uma quantidade significativa de memória e afetar o desempenho do servidor. Idealmente,o valor deve ser configurado conforme a quantidade de RAM disponível e a carga de trabalho da aplicação.

Dica Extra:Conexões Inativas

Transações inativas ocupam recursos que poderiam estar disponíveis para outras operações. Para configurar um tempo limite para sessões inativas,use:

alter system set idle_in_transaction_session_timeout='1min';

2. Ajustes para Consultas Paralelas

A capacidade de executar consultas em paralelo é um dos recursos mais poderosos do PostgreSQL para acelerar a execução de tarefas pesadas. Os comandos abaixo ajudam a controlar o número de processos paralelos e a memória disponível para cada consulta.

a) Controlando o Número de Trabalhadores Paralelos

A configuração max_parallel_workers_per_gatherdefine quantos processos podem ser alocados para uma única consulta paralela. Um valor muito alto pode sobrecarregar a CPU,então é importante testar diferentes valores.

alter system set max_parallel_workers_per_gather=4;

Além disso,você pode definir o número total de processos paralelos disponíveis:

alter system set max_worker_processes=8;

Esses ajustes ajudam o PostgreSQL a utilizar melhor a CPU em consultas mais complexas,como as que envolvem grandes volumes de dados ou operações como JOIN.

b) Limitando o Uso de Memória por Operação

Para operações que exigem uso intensivo de memória,como ordenações e junções,o PostgreSQL usa o parâmetro work_mem. O valor padrão pode ser muito baixo em alguns casos,especialmente quando há muita memória disponível no servidor:

alter system set work_mem='16MB';

3. Cache e Armazenamento Eficiente de Dados

Para otimizar o armazenamento e uso de cache,o PostgreSQL oferece várias configurações que controlam o uso da memória.

a) shared_buffers

O parâmetro shared_buffersdefine a quantidade de memória reservada para o cache de dados do PostgreSQL. Em um servidor dedicado,recomenda-se configurar esse valor para aproximadamente 25% a 40% da memória RAM disponível:

alter system set shared_buffers='1GB';

Esse ajuste reduz a necessidade de leitura de disco,pois os dados acessados recentemente permanecem em memória,aumentando a velocidade das operações.

b) effective_cache_size

O parâmetro effective_cache_sizeinforma ao otimizador do PostgreSQL a quantidade de memória total que o sistema operacional usa para o cache. Embora esse parâmetro não reserve diretamente a memória,ele ajuda o otimizador a calcular a eficiência de planos de consulta. Um bom valor é geralmente entre 50% e 75% da memória do sistema:

alter system set effective_cache_size='4GB';

c) Reduzindo o Custo de Leitura Aleatória

Em sistemas com armazenamento SSD,as leituras aleatórias são rápidas,mas o PostgreSQL,por padrão,assume um custo mais alto para esse tipo de operação. Ajustar o random_page_costajuda o otimizador a escolher planos de consulta mais rápidos:

alter system set random_page_cost=1.1;

Isso faz com que o banco de dados prefira leituras aleatórias,aproveitando melhor a velocidade dos SSDs,o que é vantajoso para sistemas que dependem desse tipo de armazenamento.

4. Configuração de Eventos e Monitoração de Desempenho

Manter uma boa monitoração é essencial para identificar gargalos de desempenho e ajustes necessários.

a) Ajuste do Tempo de Sessão

Para analisar quanto tempo uma sessão permanece ativa,você pode configurar parâmetros de timeout para sessões inativas ou limites de execução de consultas:

alter system set statement_timeout='30s';

Esse ajuste define um limite de tempo para a execução de cada consulta. Se uma consulta exceder esse limite,ela será encerrada automaticamente,evitando que consultas lentas sobrecarreguem o servidor.

b) Log de Consultas Lentas

Configurar o log de consultas lentas é uma prática recomendada para detectar queries que precisam de otimização:

alter system set log_min_duration_statement='500ms';

Esse parâmetro grava no log qualquer consulta que leve mais de 500 milissegundos para ser executada. Com isso,é possível identificar e otimizar queries lentas.

5. Controle de Parâmetros de Custo e Processamento

a) cpu_tuple_cost

O parâmetro cpu_tuple_costdefine o custo de processamento de cada tupla (linha) no PostgreSQL. Esse custo influencia o otimizador na escolha dos planos de consulta,principalmente em tabelas grandes:

alter system set cpu_tuple_cost=0.01;

Reduzir o valor ajuda o otimizador a selecionar planos mais eficientes em ambientes de alta performance.

b) cpu_index_tuple_cost

Se seu banco de dados usa intensamente índices,esse parâmetro informa ao otimizador o custo estimado de processamento para cada linha de índice:

alter system set cpu_index_tuple_cost=0.005;

Conclusão

Otimizar o PostgreSQL pode ser um processo contínuo,e as configurações ideais variam dependendo da infraestrutura,volume de dados e carga de trabalho específica da aplicação. Ajustes como o aumento de conexões simultâneas,otimização de consultas paralelas e ajuste de parâmetros de cache são fundamentais para garantir um banco de dados rápido e eficiente.

Além dos comandos apresentados,lembre-se de monitorar regularmente o desempenho do banco de dados e registrar consultas lentas. Ferramentas de monitoração,como o pg_stat_activity,ajudam a identificar gargalos,enquanto ajustes específicos permitem responder às necessidades da aplicação de forma eficiente.

Com esses ajustes e uma monitoração constante,você terá um PostgreSQL otimizado,capaz de oferecer suporte a aplicativos de alta performance,garantindo uma resposta rápida e uso eficiente de recursos do servidor.

LEIA TAMBÉM:Os Principais Comandos SQL que Todo Desenvolvedor Deve Conhecer

VAI GOSTAR:O que é normalização de banco de dados?–Descubra tudo sobre a normalização de banco de dados,incluindo as explicações detalhadas da 5NF e 2NF com exemplos práticos. Aprenda como melhorar a organização e a eficiência dos seus dados e otimize seus sistemas de forma profissional.

Compartilhe:

Ramos Souza J
Ramos Souza Jhttps://ramosdainformatica.com.br/sobre/
Com mais de 26 anos de experiência em desenvolvimento de software, minha carreira é marcada por constante evolução tecnológica e pela entrega de soluções que fazem a diferença. Desde os primeiros passos com Clipper e Delphi até a consolidação em JavaScript e TypeScript, desenvolvi expertise em frameworks como Node.js, Nest e React, além de bancos de dados relacionais e não relacionais. Sou um Desenvolvedor Full Stack apaixonado por resolver problemas complexos com excelência técnica, adaptando-me rapidamente a novos desafios. Além do domínio técnico, sou reconhecido por meu relacionamento interpessoal e compromisso com resultados. Atualmente, trabalho em uma startup de Health-Tech e sou voluntário na OpenJS Foundation, promovendo o avanço do ecossistema JavaScript. Além de manter este site.

RECENTES

Claude Sonnet 4.5: Mais Avançado para Programação e Automação

A Anthropic acaba de lançar o Claude Sonnet 4.5,...

AP2 do Google: Desenvolva Pagamentos para agentes de IA

O Google lançou o Agent Payments Protocol (AP2), um...

Curso gratuito de GitHub Copilot para devs e estudantes

A Microsoft abriu as inscrições para o primeiro Bootcamp...

Santander e a Alura oferecem 60.000 bolsas em carreira de tecnologia

Quer dar um salto na sua carreira? O Santander Imersão Digital está...

Google Tradutor desafia o Duolingo com novas ferramentas de aprendizagem de idiomas

O Google está lançando um novo recurso experimental com...

A peça que faltava para agentes de IA autônomos.

Este artigo foi originalmente publicado em: https://www.linkedin.com/newsletters/ezine-dev-ramos-da-inform%25C3%25A1tica-6947960536550526976/ A inteligência...
Newsletter semanal no LinkedIn
EZine Dev Ramos da Informática
Grandes dicas em JavaScript, Node, React, Next, Banco de Dados & IA.
Assinar grátis
Abre em nova aba
spot_img