PgBouncer? O que é? Pra que serve?
O bouncer é um agrupador de conexões para o PostgreSQL.
Qualquer aplicação de destino pode ser ligado ao pgbouncer como se fosse um servidor PostgreSQL , e pgbouncer vai criar uma ligação ao servidor real , ou vai reutilizar uma das suas ligações existentes.
Além disso, ele tem três diferentes modos de pool:
pool por sessão (Session pooling)
Método mais educado ou gentil. Quando o cliente se conecta, a conexão com o servidor será atribuída a ele enquanto dure toda a conexão do cliente. Quando o cliente se desconectar, a conexão do servidor será colocada de volta como disponível no pool. Este é o método padrão.
pool por transação (Transaction pooling)
A conexão com o servidor é atribuída ao cliente apenas durante uma transação. Quando o PgBouncer percebe que transação acabou, a conexão do servidor será colocada de volta como disponível no pool.
Pool por declaração ou comando (Statement pooling)
Método mais agressivo. A conexão com o servidor será colocada de volta como disponível ao pool imediatamente após o fim da consulta. Transações com várias instruções não são permitidas neste modo.
Vantagem de se utilizar o pgBouncer?
Em ambientes com muitas conexões e muitos usuários ele ajuda a reduzir o impacto de performance causado pela abertura de novas conexões.
1) Instalação exemplo no CentOS:
# yum install pgbouncer
Ou Compilando
# wget http://pgfoundry.org/frs/download.php/3393/pgbouncer-1.5.4.tar.gz
# tar -zxvf pgbouncer-1.5.4.tar.gz
# cd pgbouncer-1.5.4
# ./configure
# make
# make install
2) Para o funcionamento ele precisa de dois arquivos um é pgbouncer.ini para configuração e um outro para os usuarios eu normalmente uso o nome pgbouncer-users.txt
2.1) pgbouncer.ini Exemplo:
[databases]
Minha_Database = host=127.0.0.1 port=5432 dbname=Minha_Database
Minha_Database1 = host=127.0.0.1 port=5432 dbname=Minha_Database1
Minha_Database2 = host=127.0.0.1 port=5432 dbname=Minha_Database2
[pgbouncer]
listen_port = 6432
listen_addr = 127.0.0.1
auth_type = md5
auth_file = pgbouncer-users.txt
logfile = pgbouncer.log
pidfile = pgbouncer.pid
admin_users = dba
2.2) pgbouncer-users.txt Exemplo:
"usuario1" "senha_usuario1"
"usuario2" "senha_usuario2"
"usuario3" "senha_usuario3"
"usuario4" "senha_usuario4"
3) Executando o pgbouncer:
# pgbouncer -d pgbouncer.ini
4) Para testar se esta conectando ao banco via pgbouncer use a porta que o pgbouncer esta escutando "listen_port"
# psql -U usuario1 -p 6432 -d Minha_Database
Se conectou quer dizer que o pgbouncer esta funcionando, bom ele ainda tem varias outras funcionalidades e comandos internos que podem ser executados para isso você pode ler o manual do pgbouncer clicando
AQUI.
Existem outras ferramentas que fazem a mesma tarefa que pgbouncer um exemplo é o Pgpool mais em minha opinião o pgbouncer em questão de facilidade e reaproveitamento de conexões é o melhor pelo menos até o momento.