0Pricing
SQL Academy · Aula

Agrupamento de conexões: PgBouncer

Execute PgBouncer no modo de agrupamento por transação, dimensione os agrupamentos corretamente e evite a armadilha das instruções preparadas.

Agrupamento de conexões: PgBouncer é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

Por que agrupar conexões

Cada conexão do Postgres é um processo separado do OS — consome muita memória e CPU. Aplicações que abrem e fecham conexões a cada solicitação esgotam rapidamente o servidor. O agrupamento reutiliza um pequeno conjunto de conexões de longa duração.

Custo por conexão

Um processo de backend típico do Postgres usa de 5 a 10 MB de RAM. 500 conexões = aproximadamente 5 GB de RAM somente para os processos de backend. PgBouncer pode multiplexar milhares de clientes em 50 conexões de backend.

Três modos de agrupamento

  • Session — o cliente recebe uma conexão dedicada durante toda a sessão
  • Transaction — o cliente recebe uma conexão por transação
  • Statement — uma conexão por instrução (raramente usado)

Modo de transação (recomendado)

Cada transação recebe uma conexão com o servidor. O mesmo cliente pode usar conexões diferentes entre as transações.

# pgbouncer.ini
[databases]
mydb = host=primary port=5432 dbname=mydb

[pgbouncer]
pool_mode = transaction
listen_port = 6432
max_client_conn = 1000
default_pool_size = 50

Ressalvas do modo de transação

Recursos que exigem estado de sessão deixam de funcionar:

  • Instruções preparadas (precisam do mesmo backend em chamadas diferentes)
  • SET LOCAL ... (por transação funciona; SET ... que persiste entre transações, não)
  • LISTEN / NOTIFY (exigem uma conexão persistente)

Modo de sessão

Use-o quando o modo de transação causar problemas na aplicação — mas você terá menos clientes simultâneos.

Dimensionamento dos conjuntos de conexões

Regra prática: default_pool_size ≈ vCPU count × 2 + spindles. Um valor alto demais = a troca de contexto reduz o throughput; um valor baixo demais = espera no conjunto de conexões.

PgBouncer na frente do HAProxy

Uma pilha de produção típica:

App → HAProxy (read/write routing) → PgBouncer (pooling) → Postgres

Instruções preparadas no modo de transação

As versões recentes do PgBouncer (1.21+) oferecem suporte a instruções preparadas no nível do protocolo no modo de transação. Versões mais antigas: use consultas simples ou o modo de sessão.

Monitoramento do PgBouncer

Conecte-se ao banco de dados de administração (banco de dados especial):

psql -p 6432 -U pgbouncer pgbouncer

-- Commands:
SHOW STATS;
SHOW POOLS;
SHOW CLIENTS;
SHOW SERVERS;

Alternativas

  • pgpool-II — agrupamento + balanceamento de carga + reescrita de consultas
  • Odyssey — agrupador de conexões da Yandex, com várias linhas de execução
  • Conjuntos de conexões no lado do driver — geralmente combinados com PgBouncer para agrupamento em todo o cluster

Conjunto de conexões da aplicação + PgBouncer

As aplicações normalmente executam seu próprio conjunto de conexões (HikariCP, pgxpool) E passam pelo PgBouncer. Agrupamento em duas camadas — o conjunto da aplicação mantém conexões com o agrupador; o agrupador as multiplexa em conexões com o Postgres.

Resumo

PgBouncer é essencial em qualquer escala não trivial.

  • O modo de transação é o padrão
  • Tenha cuidado com instruções preparadas / SET / LISTEN
  • Tamanho do conjunto ≈ vCPU × 2
  • Monitore com SHOW POOLS

Verificação rápida

Qual modo do PgBouncer multiplexa mais clientes usando o menor número de conexões com o servidor?

Perguntas Frequentes

A aula “Agrupamento de conexões: PgBouncer” é grátis?

Sim — o texto completo de “Agrupamento de conexões: PgBouncer” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “Agrupamento de conexões: PgBouncer”?

Execute PgBouncer no modo de agrupamento por transação, dimensione os agrupamentos corretamente e evite a armadilha das instruções preparadas. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Agrupamento de conexões: PgBouncer”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. pg_stat_statements: principais consultas
  2. pgBadger para análise de registros
  3. Agrupamento de conexões: PgBouncer
  4. Planejamento de capacidade e auditorias de fragmentação
← Voltar para SQL Academy