Pooling de Conexão

4 respostas
Oenning

Alguém tem uma explicação ou link legal sobre pooling de conexão?

Tipo, tenho uma Task no Spring que a cada 10 segundos abre X threads assíncronas que acessam o banco de dados, fazem algumas operações e finalizam.
Em alguns momentos, esse número de threads chega a 100 simultâneas e começa a dar erro de “connections refused” no Hibernate.

Meu pool estava definido em 10, removi a definição e agora o erro não acontece mais. Eu achei que pool era a quantidade mínima de conexões que ficavam em espera, e que não tinha nada a ver com conexões máximas.

Valeu!

4 Respostas

partenon

Connection pooling significa, basicamente, uma “caixa de conexoes”, onde vc deixa algumas conexoes prontas para uso. Voce configura quantas conexoes esta caixa deve ter inicialmente, quantas conexoes devem ser adicionadas qndo comecarem a faltar conexoes, e qual o maximo de conexoes que cabem na caixa. Existem diversos jeitos de se configurar. Por exemplo, pode-se usar o C3P0 ou DBCP, ou ainda usar o connection pooling que o seu Servidor de Aplicacoes disponibiliza.

Se vc nao usar connection pooling, toda hora que vc precisar de uma conexao ele vai abrir uma conexao com o banco, consumir e fechar. Com connection pooling, vc simplesmente pega uma conexao do pool e a consome. O “provedor” das conexoes eh que se encarrega de abrir, manter aberta e fechar (se necessario).

ViniGodoy
 lembrando que o processo de abrir uma conexão com o banco pode ser extremamente lento pois envolve:

a) Autenticação do cliente com o banco;

b) Criação de um ambiente virtual no banco para aquela conexão rodar - cada conexão tem seus próprios statements, ponteiros de resultsets, etc;

c) Verificação de permissões de usuário;

Entre outras coisas. Por isso a necessidade de se manter conexões abertas prontas para uso, e de se ter um pool.

Oenning

Entendi, mas ao definir meu pool em 20, por exemplo, isso não significa que apenas 20 conexões simultâneas serão permitidas, correto?
Pelo que eu entendi, a conexão 21 vai ter que ser criada enquanto a conexao 20 fica no pool.

Acho que devo ter errado em alguma outra configuração, vou dar uma olhada para ver o que pode ser.

LPJava

dar uma olhada: http://blog.camilolopes.com.br/pooldeconexaotomcat/
http://blog.camilolopes.com.br/solutionlinkhibernate/
nao sei se vai ti ajudar em algo, ver ai. flw

Criado 9 de julho de 2010
Ultima resposta 10 de jul. de 2010
Respostas 4
Participantes 4