Particionamento hash do PostgreSQL 20x mais rápido: ignorando pesquisas de catálogo

2025-08-27
Particionamento hash do PostgreSQL 20x mais rápido: ignorando pesquisas de catálogo

O particionamento hash do PostgreSQL incorre em sobrecarga de pesquisa de catálogo em aplicativos de alta taxa de transferência. Este artigo apresenta uma técnica de otimização que ignora as pesquisas de catálogo do PostgreSQL pré-calculando os índices de partição na camada do aplicativo. O uso da gem Ruby `pg_hash_func` ou a chamada direta das funções hash do PostgreSQL pode acelerar as consultas em mais de 20 vezes, reduzindo significativamente a latência. Essa abordagem é adequada para cenários críticos de desempenho e oferece mais opções para equilibrar simplicidade e desempenho.

Leia mais
Desenvolvimento Particionamento Hash

Assistentes de código de IA: bênção ou maldição?

2025-06-17
Assistentes de código de IA: bênção ou maldição?

Assistentes de codificação de IA estão se tornando cada vez mais sofisticados, gerando código limpo e eficiente. No entanto, isso pode levar ao 'fechamento prematuro', onde os desenvolvedores são seduzidos por soluções aparentemente perfeitas e ignoram problemas mais profundos. O artigo usa uma analogia médica, comparando a IA a médicos experientes que podem perder uma condição rara devido à sua experiência. O autor aconselha os desenvolvedores a avaliar criticamente as sugestões de IA, explorar ativamente várias soluções e evitar cair na armadilha de soluções rápidas para melhorar a qualidade do código e evitar o acúmulo de dívida técnica.

Leia mais
Desenvolvimento

Comportamento Inesperado do PostgreSQL: CTEs, DELETE e LIMIT

2025-05-04
Comportamento Inesperado do PostgreSQL: CTEs, DELETE e LIMIT

Um comportamento surpreendente do PostgreSQL surgiu ao usar uma Expressão de Tabela Comum (CTE) com DELETE ... RETURNING e LIMIT para processar um lote de itens. A intenção era deletar apenas uma linha, mas várias linhas foram deletadas. `EXPLAIN ANALYZE` revelou uma otimização de junção semi-join de loop aninhado, fazendo com que a cláusula LIMIT 1 fosse executada várias vezes. A solução foi reestruturar a consulta, evitando a CTE e usando uma subconsulta diretamente na cláusula WHERE do DELETE. Isso destaca que CTEs nem sempre impedem otimizações do plano de consulta, e um exame cuidadoso do plano é crucial para operações críticas.

Leia mais
Desenvolvimento Otimização de Consulta

Commit síncrono do PostgreSQL: um trade-off entre desempenho e durabilidade

2025-03-19
Commit síncrono do PostgreSQL: um trade-off entre desempenho e durabilidade

Esta postagem explora as implicações de desempenho da configuração `synchronous_commit` do PostgreSQL. Desativá-la aumenta significativamente a taxa de transferência de transações, reduzindo a E/S e a carga da CPU, mas introduz uma pequena janela de risco para perda de dados. O autor demonstra um aumento de 30% no TPS em sistemas com restrições de E/S. O artigo defende uma abordagem matizada, sugerindo o ajuste de `synchronous_commit` por sessão, transação ou operação, com um exemplo em Ruby on Rails fornecido. O autor também observa que, no Aurora PostgreSQL, definir `synchronous_commit` como `off` produz os maiores ganhos de desempenho.

Leia mais
Desenvolvimento commit síncrono

Escalonando PostgreSQL: Problemas estranhos e soluções para startups de alto crescimento

2025-02-09
Escalonando PostgreSQL: Problemas estranhos e soluções para startups de alto crescimento

Este post aborda os desafios comuns de escalonamento do PostgreSQL enfrentados por startups de alto crescimento. Ele cobre problemas como contenção de bloqueio, inchaço de índice, ineficiências de armazenamento TOAST e as complexidades de escalonamento vertical versus horizontal, tabelas somente de anexação versus tabelas com muitas atualizações e multilocatário. Para cada problema, são oferecidas soluções práticas, que vão desde ajustes de parâmetros do banco de dados e ferramentas de concorrência até repensar os padrões de acesso a dados e utilizar recursos como bloqueios consultivos. O autor também explora tópicos avançados, como migrações de esquema sob carga, atualizações com tempo de inatividade zero e estratégias eficientes de consultas COUNT. Este é um recurso valioso para engenheiros que se esforçam para otimizar o desempenho do PostgreSQL em ambientes exigentes.

Leia mais

Mocks de banco de dados: mais problemas do que valem a pena?

2024-12-30
Mocks de banco de dados: mais problemas do que valem a pena?

Embora tentador pela velocidade e simplicidade, o autor argumenta que o uso de mocks de banco de dados para testes, finalmente, causa mais problemas do que resolve. Um exemplo de criação de usuário destaca as diferenças entre mocks e testes contra um banco de dados real. Testes de banco de dados reais revelam problemas potenciais precocemente, como violações de restrições exclusivas, tratamento de valores padrão e gargalos de desempenho, economizando tempo de depuração e reduzindo riscos de produção. À medida que os aplicativos evoluem e os esquemas mudam, os testes de banco de dados reais lidam melhor com novas validações, modificações de tipo de dados e alterações na precisão do timestamp, garantindo que o código esteja alinhado com o banco de dados real. O autor sugere priorizar testes de banco de dados reais para camadas de acesso a dados, enquanto o usa na camada de serviço para expor interações de lógica de negócios com dados. As camadas de controladores, no entanto, podem simular chamadas de serviço de forma eficaz. O equilíbrio entre testes de banco de dados reais e mocks é essencial para construir aplicativos robustos.

Leia mais