Pesquisa Paginada Hibernate Sql Server 2000 muito lenta  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
alex braga
Entusiasta Java
[Avatar]

Membro desde: 19/03/2010 14:52:36
Mensagens: 15
Offline

Bom dia a todos,

Estou fazendo uma pesquisa paginada com Hibernate e SQL Server 2000.
a pesquisa funciona mas está absurdamente lenta, para trazer 3 registros, demora 20 segundos.
quando retiro a paginação a pesquisa retorna 100 registros em menos de 1 segundo.

o sql gerado pelo hibernate inclui o predicado top 3, na segunda página top 6 e assim por diante.

alguém teria alguma experiência e/ou sugestão para este tipo de consulta.

Valeu.
fabiozoroastro
GUJ Master
[Avatar]

Membro desde: 15/05/2006 16:23:01
Mensagens: 1262
Offline

Alex,

se você executar a SQL que o hibernate gerou diretamente em um cliente SQLServer ele também demora todo esse tempo?

[]'s

..."Apenas sorria!"

Twitter

Blog

alex braga
Entusiasta Java
[Avatar]

Membro desde: 19/03/2010 14:52:36
Mensagens: 15
Offline

Sim.
Ao executar o sql gerado ele demora os mesmos 20 segundos.
fabiozoroastro
GUJ Master
[Avatar]

Membro desde: 15/05/2006 16:23:01
Mensagens: 1262
Offline

Posta a SQL aí pra gnt dar uma analisada.

[]'s

..."Apenas sorria!"

Twitter

Blog

pbnf
JavaGuru

Membro desde: 18/06/2003 12:06:55
Mensagens: 228
Localização: De volta a Cuiabá-MT, 40º na sombra !!!
Offline

Vc ta usando o dialeto correto para o SQLserver ? Outra coisa, em uma consulta paginada o select deve conter a partir de que posição vc deseja e quantos elementos devem ser retornados.
alex braga
Entusiasta Java
[Avatar]

Membro desde: 19/03/2010 14:52:36
Mensagens: 15
Offline


Essa é o metodo generico que faz pesquisa paginada.


Esta é a sql gerada pelo hibernate



este é o dialeto usado:



Para posta a Sql tive que editar o nome das tabelas, o chefe mandou. rss.
Mas acho que dá para entender.

Obrigado pela Compreensão.
clone_zealot
JavaEvangelist

Membro desde: 21/11/2004 16:40:00
Mensagens: 424
Offline

E qual o SQL gerado para quando não tem paginação?
A mesma coisa, mas sem o top 'n' ?

"Não amo a espada por sua agudez,
não amo a flecha por sua rapidez,
não amo o homem por sua glória,
amo sim, tudo o que eles defendem"
Faramir, Príncipe de Ithilien
fabiozoroastro
GUJ Master
[Avatar]

Membro desde: 15/05/2006 16:23:01
Mensagens: 1262
Offline

Olá Alex,

eu nunca ouvi dizer que a instrução top causava lentidão na execução de consultas SQL.

Você percebeu que o problema não é do hibernate né? O problema é na SQL que está sendo executada.

Dê uma pesquisada na internet sobre problemas com o top e SQL Server.

Abraço.

This message was edited 1 time. Last update was at 20/07/2011 15:02:20


[]'s

..."Apenas sorria!"

Twitter

Blog

alex braga
Entusiasta Java
[Avatar]

Membro desde: 19/03/2010 14:52:36
Mensagens: 15
Offline

Valeu Fábio.

È eu fiz o teste e constatei isso que vc falou.
Vou dá uma pesquisada sobre o top no SQL SERVER, fiz o teste no Banco de desenvolviemtno e de produção e os 2 apresentaram lentidão nesta sql com comando top.
Fiz o teste com o top em outras consultas e realmente é bem rápido.
Nessa consulta que postei é que apresenta lentidao com top, realizando a consulta normal o resultado é instantâneo


Obrigado pela atenção.

allancmm
JavaBaby
[Avatar]

Membro desde: 17/05/2010 16:40:58
Mensagens: 79
Localização: BH
Offline

kra, nao conheco bem o hibernate, infelizmente, mas pq vc, ao inves de deixa-lo criar a query, nao faz algo assim em hql:




neste caso, para num_pag = 1, o select mais de dentro retorna as 3 primeiras linha e o mais de fora, retorna as 3 primeiras linhas apos, assim essa instrucao retorna da 4ª a 6ª linhas.

Espero ter ajudado.

This message was edited 1 time. Last update was at 20/07/2011 16:14:11


Allan Christian
Bacharel em Ciência da Computação
Pós-Graduando Engenharia de Software

Entre "Deus existe" e "Deus não existe" estende-se um campo muito vasto que um autêntico sábio
atravessa com grande esforço. - Tchekhov
[Email]
calel
JavaTeenager

Membro desde: 27/08/2009 14:33:17
Mensagens: 157
Offline

Já tive que fazer paginação com hibernate e SQL Server, e só digo uma coisa, não faça, hehe
Pq o hibernate vai fazer como o allancmm falou, na primeira pagina ele resgata 10 registros, depois 20, depois 30....entendeu? Ele não pula os 10 primeiros na segunda pagina pra trazer só os outros 10.
A solução aqui na minha empresa foi apelar pra SQLQuery


Onde inicio é a posição inicial que devemos trazer e fim a posição final.
Se eu quero trazer 10 por pagina eu faço.
inicio = numeroDaPagina x quantidadePorPagina
fim = inicio + quantidadePorPagina
Baseado nisso você pode adaptar melhor a query ao seu caso.

This message was edited 1 time. Last update was at 21/07/2011 06:56:06


Code Reverse

"Contra a estupidez os próprios deuses lutam em vão." - Friedrich Von Schiller
How To Answer A Question on the Internet
alex braga
Entusiasta Java
[Avatar]

Membro desde: 19/03/2010 14:52:36
Mensagens: 15
Offline

Obrigado pela Ajuda.

As duas propostas são muito boas. Mas vcs sabem, esta coisa de desenvolvimento ultra-rápido prazos apertados e sobrecarga de trabalho
faz com que nós desenvolvedores, busquemos atalhos para agilizar o Desenvolvimento.
O Hibernate é uma ferramenta fantástica para o desenvolvimento ágio.
Imagine vc criar "querys" "dtos" "vos" e outro "os" a mais em um sistema que faz manutenção em 30, 40 50 tabelas no banco.
No meu caso quando eu terminar de implementar as "query e os" o prazo acabou e não tenho nada a apresentar.

Bom deixando a choradeira para trás, e voltando ao problema.
Manti a consulta, realmente esta consulta com top faz o descrito acima, trás 10, depois 20 e assim por diante.
Para melhorar a consulta, Usamos o SqlManager e executamos o plano de execução da consulta, dessa forma descobrimos os gargalos da consulta.
Então, foi criado indexes nas tabelas envolvidas na consulta.
O Tempo de resposta melhorou consideravelmente, cai dos 20 segundos para 1 segundo.
Não me pergunte como foi feito, não foi eu quem fiz, estava fazendo outras coisa conforme a choradeira rss.
Mas quando tiver um tempo, vou pergunta a pessoa que fez e posto a solução aqui.

Mais uma vez, muito o brigado pela atenção vcs ajudaram muito.

Valeu.

This message was edited 1 time. Last update was at 21/07/2011 11:18:55

fabiozoroastro
GUJ Master
[Avatar]

Membro desde: 15/05/2006 16:23:01
Mensagens: 1262
Offline

Beleza Alex.

Parabéns por ter resolvido o problema.

[]'s

..."Apenas sorria!"

Twitter

Blog

 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team