SGBD: uma conexão fixa ou varias?

em testes com a base de dados H2 pude constatar o seguinte:

criando apenas uma conexão entre a aplicação java e o banco de dados para uso de muitas threads, o consumo de memoria pela JVM aumenta consideravelmente, porém a aplicação fica mais veloz

usando outra estratégia, cada thread fazendo uma conexão com o banco, o consumo de memória reduz um pouco porém a aplicação fica muito lenta

lembrando que as operações com o banco de dados são apenas SELECT, DELETE e INSERT com sqls bem simples

alguma sugestão para melhora ou outra estrategia para conexão com o SGBD ?

[quote=mmx]em testes com a base de dados H2 pude constatar o seguinte:

criando apenas uma conexão entre a aplicação java e o banco de dados para uso de muitas threads, o consumo de memoria pela JVM aumenta consideravelmente, porém a aplicação fica mais veloz

usando outra estratégia, cada thread fazendo uma conexão com o banco, o consumo de memória reduz um pouco porém a aplicação fica muito lenta

lembrando que as operações com o banco de dados são apenas SELECT, DELETE e INSERT com sqls bem simples

alguma sugestão para melhora ou outra estrategia para conexão com o SGBD ?

[/quote]

A princípio, isso não faz sentido … Tem certeza que não é o contrário não ? 1 conexão compartilhada = - consumo de memória + lentidão; 1 conexão / thread = +consumo de memória + rapidez ?

De qualquer maneira, o mais comum é usar um pool de conexões e alocar 1 conexão por thread que deve acessar o banco. Outro fator, pode ser também o nível de isolamento de transações no banco de dados (não sei qual o suporte do H2). Mas certifique-se de que está configurado para READ_COMMITED - proporciona um bom equilíbrio entre concorrência entre tabelas e isolamento de transações.

por incrível que pareça, obtive os resultados descritos acima, mas vou observar a configuração que vc mencionou e ver se é possível aplica-la ao H2

segundo as minhas pesquisas o H2 usa READ_COMMITED por default.

Agora veio um pensamento e me corrijam se eu estiver errado:

O projeto está sendo testado em uma máquina de baixo desempenho: 2 GB de RAM processador de 1 core, de acordo com as várias políticas de escalonamento do windows, eu creio que a JVM esta com um quantum insuficiente para fazer seu trabalho de liberação de RAM, deixei o programa rodando de noite e o consumo de RAM se manteve estável, assim que comecei a mexer na máquina hoje, o uso de memória começou a aumentar discretamente.

piração minha ou faz sentido ?