DBAtlas · Atlas de operações de banco de dados

Escolha do pool_mode do PgBouncer e dimensionamento básico

PostgreSQLPgBouncer

Comando

; /etc/pgbouncer/pgbouncer.ini
[databases]
appdb = host=<primary_host> port=5432 dbname=appdb pool_mode=transaction
reportdb = host=<primary_host> port=5432 dbname=appdb pool_mode=session

[pgbouncer]
listen_addr = 0.0.0.0
listen_port = 6432
auth_type = scram-sha-256
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
max_client_conn = 5000
default_pool_size = 20
reserve_pool_size = 5
max_prepared_statements = 200
query_wait_timeout = 120

O que faz

O modo session vincula um cliente a uma conexão de servidor durante toda a vida da conexão; o modo transaction atribui uma conexão de servidor apenas durante uma transação e atende milhares de clientes com dezenas de conexões PostgreSQL; o modo statement devolve a conexão após cada consulta e não permite transações com vários comandos. O pool_mode também pode ser sobreposto por banco.

Quando usar

Modo transaction para aplicações OLTP/microsserviços que abrem muitas conexões de vida curta; modo session para trabalhos que dependem do estado da sessão (relatórios, migrações, serviços que usam LISTEN).

Atenção

No modo transaction o estado da sessão não é preservado entre transações: SET (exceto SET LOCAL), advisory locks em nível de sessão, LISTEN, cursores WITH HOLD, tabelas temporárias entre transações e PREPARE em nível de SQL não são confiáveis. Prepared statements em nível de protocolo só são suportados com PgBouncer 1.21+ e max_prepared_statements > 0 (padrão 200 desde o 1.24, 0 antes). default_pool_size vezes o número de pares (banco, usuário) não deve exceder o max_connections do PostgreSQL (menos a margem de superuser_reserved_connections).

Abrir no DBAtlas →

Relacionados