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 = 50Ressalvas 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
- pg_stat_statements: principais consultas
- pgBadger para análise de registros
- Agrupamento de conexões: PgBouncer
- Planejamento de capacidade e auditorias de fragmentação