Melhores Práticas de Pooling
Dimensiona pools de conexão a partir da capacidade do banco de dados, não da contagem de réplicas do microsserviço. Use esta lista de verificação ao implantar o PgBouncer na frente do PostgreSQL 18.4.
Como Usar Esta Lista
- Valide o staging através do pooler, não apenas diretamente na porta 5432.
- Monitore
cl_waitingantes de aumentarmax_client_conn. - Emparelhe as alterações do pool com snapshots de
pg_stat_activity.
A - Dimensionamento
- Dimensiona o pool do servidor a partir de núcleos de CPU e latência de consulta p95. Não
pods * pool_max. - Mantenha as conexões máximas do servidor abaixo de 70% de
max_connections. Reserve margem para administração/replicação. - Use pooling de transação para OLTP web stateless. Pooling de sessão apenas quando necessário.
- Desabilite ou limite prepared statements no lado do servidor em modo de transação. Evite erros intermitentes.
- Defina
max_client_connalto o suficiente para os aplicativos, mas com limites. O pooler é barato; o Postgres não é.
B - Configuração
- Configure
server_reset_query = DISCARD ALLem modo de transação. Limpa o estado da sessão entre os checkouts. - Use aliases de pool separados por função (oltp, reporting, admin). Limites independentes de
pool_size. - Termine o TLS no pooler ou no aplicativo de forma consistente. Documente a rotação da trust store.
- Execute o PgBouncer 1.x com SCRAM em direção ao PostgreSQL 18. Alinhe os mecanismos de autenticação.
- Faça health-check do pooler no load balancer. Não apenas do primário do Postgres.
C - Timeouts e Segurança
- Defina
statement_timeoutatravés dos padrões deALTER ROLE. Sobrevive a resets do pooler. - Defina
idle_in_transaction_session_timeoutem roles de aplicativo. Libera backends do servidor. - Use
lock_timeoutem roles OLTP. Falha rapidamente sob contenção de migração. - Contorne o pooler apenas para janelas controladas de DDL administrativo. Documente o URL de "break-glass".
- Crie alertas para
cl_waitingsustentado e erros de conexão. Notifique antes da inundação de usuários.
D - Operações
- Inclua o pooler em testes de failover. DNS ou troca de configuração para um novo primário.
- Controle de versão do pgbouncer.ini e userlist/auth_query. Revise em PRs.
- Teste de carga de picos de conexão na implantação. Reinícios de pods em rolo através do pooler.
- Separe pools para réplicas de leitura ao rotear análises. Não compartilhe
pool_sizedo pool primário. - Revise
pg_stat_activity.application_namepara conexões misteriosas. Mapeie para aliases de pool.
FAQs
Ponto de partida para o tamanho do pool?
Frequentemente 2-4x núcleos de CPU para o pool total do servidor; ajuste com métricas.JDBC maximumPoolSize?
Pequeno por pod; confie no PgBouncer para multiplexação.sessão vs transação?
transação por padrão; sessão para tabelas temporárias/listen.prepared statements?
Geralmente desativados em modo de transação para ORMs.múltiplos clusters?
Instância PgBouncer separada ou separação lógica por cluster.observabilidade?
SHOW POOLS/STATS mais pg_stat_activity do Postgres.serverless?
Pool externo necessário; nunca estourar `max_connections` bruto.pool gerenciado na nuvem?
Mesmos princípios; verifique o comportamento de prepare e timeout.exposição do console de administração?
Restrinja o socket de administração do PgBouncer; sem internet pública.próxima seção?
Ajuste de OLTP vs OLAP para isolamento de carga de trabalho além do pooling.Relacionados
- Noções Básicas de Pooling - Fundamentos
- Modos do PgBouncer -
pool_mode - Prepared Statements e Pooling - Configuração de ORM
- Matemática de Conexão - Fórmulas
Versões da Stack: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x e PostGIS 3.5+.