"Too many connections" no MySQL

3 respostas
adrianostanley

Olá pessoal, estou utilizando o Hibernate pra se conectar a um banco de dados MySQL… aí vem aquele problema clássico… como resolver o “Too many connections” sendo que após cada query ou ação de inserção/remoção/alteração eu já estou utilizando:

session.flush(); session.close();
Me parece que as conexões não estão sendo fechadas como deveria…
Se alguém puder me ajudar… =D
Abraços,
Adriano

3 Respostas

maquiavelbona
  • Confira o número de conexões que você permite no pool ( é comum a configuração estar com mais do que o banco disponibiliza);
  • Se uma transação não for finalizada, ele não retorna a conexao ao pool ( não lembro como o hibernate procede com o session.close() );
  • Confira quantas conexões simultâneas ele está ocupando;
  • Veja se não tem alguma “ponta solta” ( vai que uma classe está falha em algum lugar? ).

Até!

adrianostanley

Já conferi e não há pontas soltas... visto que todas as ações são executadas em uma classe DAO genérica... ou, seja, já bati o olho em cada ação e não encontrei nenhuma que não fechasse a conexão no final.

Enfim, o modo como eu busco as sessões é através de um método estático em uma classe dessa maneira:
public final class HibernateUtil{

	private static SessionFactory getSessionFactory(Class clazz) throws MappingException{
		return new Configuration().addClass(clazz).buildSessionFactory();
	}

	public static Session getSession(Class clazz){
		return getSessionFactory(clazz).openSession();
	}
}
Será que há algo de errado aí?
adrianostanley

Resolvido pessoal…
Bastava apenas fechar a factory de sessões que as threads da lista de processos do MySQL são encerradas, não ocupando mais uma conexão…
Fica aqui então um exemplo pra quem futuramente tiver esse problema.
Um grande abraço a todos…

public void insere(Object obj) throws Exception{ SessionFactory factory = new Configuration().addClass(clazz).buildSessionFactory(); Session session = factory.openSession(); Transaction tx = session.beginTransaction(); session.save(obj); session.flush(); tx.commit(); session.close(); factory.close(); }

Criado 17 de dezembro de 2007
Ultima resposta 17 de dez. de 2007
Respostas 3
Participantes 2