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
- Session: Uma conexão por sessão de cliente.
- Transaction (Recomendado): Uma conexão por transação.
- Statement: Uma conexão por consulta.
Resumo
- Use PgBouncer para prevenir o esgotamento de memória.
- Defina
pool_mode = transactionpara aplicações web.