Lentidão na aplicação

Olá pessoal

Estou com uma aplicação que após fazer uma quantidade grande de cálculos e transações no banco de dados, ela começa a apresentar muita lentidão.
Eu não faço ideia do que esteja provocando essa lentidão.
Não sei se ajuda em alguma coisa, mas a aplicação é feita com Maven, Hibernate, SQLServer e roda em um servidor JBoss.

Alguém sabe alguma coisa que cause lentidão, ou alguma configuração que pode ser feita?

Obrigado!

Já presenciei problemas de lentidão das mais variadas causas, desde índices faltando a índices em excesso, configuração do servidor, pode ser muita coisa mesmo. Pelas informações passadas, eu teria mais perguntas do que respostas para o problema.

A primeira coisa é descobrir aonde está a lentidão. No acesso aos dados? No acesso ao servidor? Fazendo uma consulta fora da aplicação, a lentidão é mesma?
A lentidão é generalizada ou específica de uma parte do sistema?
Como você controla as sessões do Hibernate, utiliza o Spring? Faz na mão? Não está compartilhando a mesma sessão entre as requisições?
Como você controla as conexões com o banco? Utiliza algum pool?
Está utilizando cache do hibernate?

Como eu não tenho muita experiência, não sei muito bem o que pode causar a lentidão, por isso não sei direito quais informações te passar, mas vamos lá: (responderei o que eu sei do sistema, não envolvido no desenvolvimento desde o começo)

A lentidão ocorre após uma grande quantidade de transações com o banco, então não sei te responder se o acesso que está lento, ou os acessos que deixam o resto lento

A lentidão é generalizada.

Não utilizo Spring, faço tudo na mão. Todas as requisições estão utilizando a mesma sessão.

Não sei se está sendo usado o cache, pelo que sei, o hibernate está com as configurações default.

Como já disse, não tenho muita experiência, caso tenha respondido algo errado, me corrija por favor! (:

Se envolve banco o primeiro lugar que eu olharia é na parte de persistência mesmo, ou seja, tudo que diz respeito ao hibernate. Infelizmente fica difícil ajudar sem poder olhar. Se o footprint de memória ta ficando muito grande por causa do cache de primeiro nível, tenta também aumentar a memória da JVM disponível pro JBoss.

Todas as requisições estão compartilhando a mesma sessão do Hibernate? Exemplo: guardando a sessão em uma variável estática e usando entre as requisições?
Se sim está aí o seu problema. O certo é criar uma sessão do Hibernate para cada requisição.

Qual ISOLATION LEVEL está usando? Dependendo do caso é melhor usar o SNAPSHOT ou READ_COMMITTED_SNAPSHOT. Mais informacoes: http://msdn.microsoft.com/pt-br/library/ms173763.aspx