terça-feira, novembro 12, 2024
spot_img
InícioRamos da InformáticaBanco de DadosComo Otimizar a Performance do PostgreSQL

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.

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:

Escrivaninha

Industrial 150cm Preto Onix

R$ 251,90

Ver Produto
Black Skull Creatine Turbo - 300 g

KIT 3 Lâmpadas Inteligentes LED Smart WI-FI compatível com Alexa

linha NEO, 10W, RGB, Luz branca e amarela (2700K-6500K), Bivolt, Avant

R$ 102,00

Ver Produto
Black Skull Creatine Turbo - 300 g

CREATINA TURBO™, um produto CAVEIRA PRETA SERIES™ formulado com creatina mono-hidratada em conjunto com o carboidrado maltodextrina.

R$ 33,52

Ver Produto


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

🚀 Última Imersão Dev do Ano: Conquiste o Back-End com a Alura e Google API da Gemini! Inscrição grátis.

Transforme-se em um Especialista em Dados, uma das áreas mais bem remuneradas atualmente: Formação completa em Engenheiro de Dados Projetos com situações do dia a dia.

Compartilhe este artigo e fortaleça sua marca pessoal agora mesmo!
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.

🚀 Última Imersão Dev do Ano: Conquiste o Back-End com a Alura e Google! Inscrição grátis.

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

E-Zine Ramos da Informática

Assine o E-Zine e tenha Conteúdo Exclusivo, Concursos para assinantes, descontos exclusivos e uma área de conteúdos exclusivos só do E-zine.

ARTIGOS RELACIONADOS
- Advertisment -spot_img

Seja um autor

Compartilhe seu conhecimento e inspire outros desenvolvedores! Torne-se um autor e publique seus artigos no nosso site. Junte-se a nós!

MAIS LIDOS

Lâmpada Inteligente Smart Color

10W Elgin RGB Wifi, compatível com Alexa e Google Home

- Advertisment -spot_img

APOIE CONTEÚDOS COMO ESTE

Apoie o Site e Nossos Conteúdos!
Cada compra feita através dos nossos links de afiliados nos ajuda a manter este site, a E-Zine e a trazer cada vez mais conteúdos relevantes para você.

Além de garantir sua compra sem custo adicional, você nos dá força para continuar criando e compartilhando. Obrigado por fazer parte desta jornada conosco!

🚀 Última Imersão Dev do Ano: Conquiste o Back-End com a Alura e Google! Inscrição grátis.