Configuração C3P0 para hibernate em ambiente de produção

7 respostas
pissurno

Bom Dia irei colocar em projeto em produção em breve e implementei as configurações abaixo para pool no hibernate.cfg.xml:

<!-- C3P0 --> <property name="c3p0.acquire_increment">1</property> <property name="c3p0.timeout">1800</property> <property name="c3p0.min_size">3</property> <property name="c3p0.max_size">100</property> <property name="c3p0.max_statements">0</property> <property name="c3p0.idle_test_period">900</property>
Gostaria de saber se pode ser configurado de uma melhor maneira para adquirir mais performance.

obrigado.

7 Respostas

T

Pô bicho também estou com uma dúvida dessa e ninguém desse Fórum responde!!! :evil:

D

Gente, o Maurício fez um ótimo tutorial, que está em Artigos / Tutoriais, a respeito do Hibernate, que explica isso. Basta ler :smiley: .
Não preciso passar o link né?

xdraculax

Bom dia :slight_smile:

c3p0.acquire_increment: Aumente isso, 4…5. O pool serve para reutilizar conexões e diminuir o custo de obtenção das mesmas. A cada vez que você for obter uma conexão o pool irá adicionar somente uma conexão na lista, não oferencendo vantagem nenhuma em relação a obter esta conexão de um método estático (isso com essa configuração que você colocou - 1). Colocando um número maior, quando você pedir uma conexão, ele criará o número que você colocou de conexões. Ou seja, assim ficaram sempre conexões disponíveis para o próximo pedido de conexão.

c3p0.timeout: isso dá 30 minutos, depois disso a conexão é jogada fora, o que não é bom. Do ponto de vista de uma conexão, 30 minutos é muito pouco. É melhor configurar para o pool fazer teste na conexão e usar isso como critério para eliminá-la ao inves de distruir conexões por tempo de existência. Pode colocar um número grande, uns 144.000.

c3p0.max_size: você acha mesmo que vai usar 100 conexões?

c3p0.idle_test_period: não lembro se isso é em millesegundos ou segundos, se for segundos, está bom, se for em millesegundos tá mt, mt pouco :slight_smile:

Inté :slight_smile:

juniorsatanas

to pegando um erro de limite de conexão alguém sabe como resolve ?

Priuli

‘c3p0.max_size’ é este, senão me engano, que determina o limite, porem verifique se não esta deixando as conexões abertas, é necessario vc fechar as conexões após usar do pool senão não havera limite que aguente…

juniorsatanas

Priuli Bom Dia !

Até ai li a documentação beleza, agora tu tem ideia como eu faço para gerenciar isso na mão ! que dizer fecha tudo apos ser aberto !

Priuli

Intão não sei como vc esta usando, mais quando vc obtem uma conexão do pool vc tem que fechar utilizando o método close para liberar a conexão para o pool novamente
exemplo:

Connection c = null;
try{
   c = dataSource.getConnection();//Pool de conexões

    //executa a query

}catch(SQLException sqlE){
}finally{
     if(c!= null)
        c.close();//liberando a conexão para o pool
}

vc tem que fechar a conexão na mesma thread que executou, caso contrario só fazendo close no pool para fechar as conexões antigas.
Eu utilizo bastante o spring e caso vc deixe aberto a conexão ele fecha e da um sysout no console mostrando que vc não esta fechando a conexão, mas cada caso é um caso o hibernate faz o controle disso tb, agora se tiver fazendo na mão vc tem que cuidar.

Criado 14 de novembro de 2008
Ultima resposta 12 de jan. de 2011
Respostas 7
Participantes 6