O Problema de Conexões no PostgreSQL

O PostgreSQL cria um novo processo para cada conexão, consumindo memória e CPU. PgBouncer é um pooler de conexões leve que fica entre sua aplicação e o banco de dados.

Pré-requisitos

  • Servidor Linux com PostgreSQL (12+).
  • Acesso root ou sudo.

Configuração Passo a Passo

1. Instalar PgBouncer

sudo apt update && sudo apt install pgbouncer

2. Configurar Autenticação (userlist.txt)

Extraia senhas do PostgreSQL:

sudo -u postgres psql -Atq -c "SELECT concat('\"', usename, '\" \"', passwd, '\"') FROM pg_shadow;" > /tmp/userlist.txt
sudo mv /tmp/userlist.txt /etc/pgbouncer/userlist.txt
sudo chown postgres:postgres /etc/pgbouncer/userlist.txt
sudo chmod 600 /etc/pgbouncer/userlist.txt

3. Configurar pgbouncer.ini

[databases]
meubd = host=127.0.0.1 port=5432 dbname=meubd

[pgbouncer]
listen_addr = *
listen_port = 6432
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
pool_mode = transaction
default_pool_size = 20
max_client_conn = 2000

4. Iniciar PgBouncer

sudo systemctl restart pgbouncer

5. Conectar a Aplicação

Altere a porta na string de conexão de 5432 para 6432.


Modos de Pooling

  1. Session: Uma conexão por sessão de cliente.
  2. Transaction (Recomendado): Uma conexão por transação.
  3. Statement: Uma conexão por consulta.

Resumo

  • Use PgBouncer para prevenir o esgotamento de memória.
  • Defina pool_mode = transaction para aplicações web.

Artigos Relacionados