Insights que transformam sua carreira!

Receba soluções práticas, dicas que economizam tempo e insights exclusivos de programação que realmente funcionam. Junte-se a mais de 5.000 assinantes!

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.

Dê um salto na sua carreira de programação!

Receba soluções práticas, economize tempo com dicas eficazes e conquiste insights exclusivos para acelerar sua evolução na área de TI. Junte-se a mais de 5.000 desenvolvedores que já estão um passo à frente!

Quero me destacar agora!

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:

Conta Exclusiva ChatGPT: Acesso Ilimitado

Desbloqueie o poder do ChatGPT com recursos premium. Aproveite 80,5% de desconto e garantia de 100% de satisfação. Junte-se hoje e viva a melhor experiência de chat com IA!

Cypress, do Zero à Nuvem: domine a automação de testes com confiabilidade e eficiência

Aprimore suas habilidades de automação de testes com Cypress, desde o início até a integração contínua.

Saiba Mais

💻 Torne-se um Desenvolvedor Fullstack!

Domine as tecnologias mais requisitadas do mercado e conquiste sua carreira dos sonhos como Desenvolvedor Fullstack. Inscreva-se hoje!

Inscreva-se

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_gather define 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_buffers define 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_size informa 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_cost ajuda 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_cost define 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.

Gostou deste conteúdo?

Assine o E-Zine Ramos da Informática e receba semanalmente conteúdos exclusivos focados em desenvolvimento frontend, backend e bancos de dados para turbinar sua carreira tech.

📘 Conteúdo Exclusivo

Dicas, insights e guias práticos para alavancar suas habilidades em desenvolvimento e bancos de dados.

🚀 Hacks de Carreira

Ferramentas, atalhos e estratégias para se destacar e crescer rapidamente no mercado de tecnologia.

🌟 Tendências Tech

As novidades mais relevantes sobre desenvolvimento web, mobile e bancos de dados para você se manter atualizado.

Já somos mais de 5.000 assinantes! Junte-se a uma comunidade de profissionais que compartilham conhecimento e crescem juntos no universo tech.

Quero Assinar Agora

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

ArcGIS Maps JavaScript: Novidades da Versão 4.32

O ArcGIS, desenvolvido pela Esri, é uma plataforma líder...

O Novo Ramos da Informática: Menos Ruído, Mais Valor

O jogo mudou. A maneira de buscar conhecimento e...

Mais de 1 milhão de vagas em cursos e oportunidades de emprego

A Ramos da Informática trouxe um compilado de diversas...

Hackathon com premiação de US$150 mil no estádio do PSG

A Chiliz, empresa de tecnologia blockchain para esportes e entretenimento,...

Destaques do Git 2.48

O projeto Git de código aberto acaba de lançar...
Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

E-Zine Ramos da Informática

Conteúdo focado em desenvolvimeto backend, frontend, banco de dados e novas tecnologias. 


📧 Não perca tempo! Assine grátis agora mesmo e leve sua carreira ao próximo nível.

Dê um salto na sua carreira de programação!

Receba soluções práticas, economize tempo com dicas eficazes e conquiste insights exclusivos para acelerar sua evolução na área de TI. Junte-se a mais de 5.000 desenvolvedores que já estão um passo à frente!