Usuário com melhor resposta
Otimizar Cursor

Pergunta
-
Bom dia Pessoal!!!
Tenho o seguinte cursor:2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
Porém ele demora muito para terminar 5 a 10 minutos....
Como devo proceder para deixá-lo mais rapido ?
Obrigado!!!
Ale
fasdfasfd- Editado Alessandro Falanque sexta-feira, 13 de fevereiro de 2009 16:02
Respostas
-
Ale,
Peço
licensa para entrar nesta discussão!!!Como
todos nós já sabemos, a utilização de cursor é uma técnica que tem uma finalidade muito grade, mas o custo de processamento que o cursor demanda poderá atrapalhar em algumas situações.Como
você mesmo já destacou, pensou em utilizar subquerys ou outras funcionalidades, gostaria de saber o porque você decidiu por cursores?
Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA- Marcado como Resposta Alessandro Falanque quarta-feira, 18 de fevereiro de 2009 18:31
-
Olá Ale2009,
A minha sugestão de gravar o resultado da consulta em uma tabela temporária e rodar o cursor contra a tabela temporária surgiu algum efeito ?
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comImporte arquivos XML com o CLR
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!346.entry
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Alessandro Falanque quarta-feira, 18 de fevereiro de 2009 18:30
-
Gustavo obrigado pela sugestao......
Vou tentar....
fasdfasfd- Marcado como Resposta Alessandro Falanque quarta-feira, 18 de fevereiro de 2009 18:30
Todas as Respostas
-
Bom Dia,
A forma mais poderosa para deixar um cursor mais rápido é não o utilizando. Normalmente cursores podem ser substituídos por outras soluções mais performáticas. De qualquer forma, talvez usar o FAST_FORWARD o ajude.
DECLARE cCURSOR CURSOR FAST_FORWARD FOR SELECT
Isso pode ajudar, mas você já verificou se a lentidão não é por conta da consulta ?
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comImporte arquivos XML com o CLR
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!346.entry
Classifique as respostas. O seu feedback é imprescindível -
Gustavo, obrigado pela resposta....
Sei q nao eh legal usar cursor, mas nesse caso é necessario...
Tava pensando em trocar os subselects por inner join, sera q isso iria melhorar a performance?
Se sim, vc poderia me dar um exemplo, pois nao sei usar join com case when....
Obrigado!!!!!
Ale
fasdfasfd -
Como citado por Gustavo,
A melhor forma é não usá-los. No entanto, para o tempo de execução da query você deve levar em consideração vários fatores, ( quantidade de registros retornados, você está usando case, está usando tabelas derivadas, e funções de agregação ).
Abraços
Demétrio Silva -
Olá Ale2009,
A performance da consulta influencia no desempenho do cursor.
Antes de propor mudanças, quanto tempo demora somente a execução da consulta ?
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comImporte arquivos XML com o CLR
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!346.entry
Classifique as respostas. O seu feedback é imprescindível -
-
Olá Ale2009,
Acredito que como o cursor irá fazer a consulta várias vezes, essa demora é prejudicial.
Tente colocar o resultado em uma tabela temporária e posteriormente rode o cursor contra a tabela temporária.
[ ]s,Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comImporte arquivos XML com o CLR
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!346.entry
Classifique as respostas. O seu feedback é imprescindível -
Ale,
Peço
licensa para entrar nesta discussão!!!Como
todos nós já sabemos, a utilização de cursor é uma técnica que tem uma finalidade muito grade, mas o custo de processamento que o cursor demanda poderá atrapalhar em algumas situações.Como
você mesmo já destacou, pensou em utilizar subquerys ou outras funcionalidades, gostaria de saber o porque você decidiu por cursores?
Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA- Marcado como Resposta Alessandro Falanque quarta-feira, 18 de fevereiro de 2009 18:31
-
-
Eu também costumo utilizar cursores em procedures com bastante processamento.
Sei da restrição do uso dos "maledetos" cursores, mais em alguns casos é extremamente necessário.
Em vários testes de performance, os sub-selects perdem feito para os joins... isso eu fiz e no meu caso melhorou muito.
Eu, particularmente, não uso sub-selects a não ser em situações extremas.
No seu caso, eu faria o uso dos joins me certificando que os campos que fazem a junção entre as tabelas estejam indexados em ambas as tabelas (ou pelo menos na que será juntada).
Leandro.
Tytto -
Junior Galvao, na verdade eu nao decidi, decidiram por mim..rsrs
FAbiano, o FAST_FORWARD nao ajudou muito nao, mas obrigado pela indicação.
Tytto, eu gostaria de aplicar os inner join, mas nao sei como converter...pode me ajudar???
Obrigado a todos pelas respostas!!!
fasdfasfd -
Olá Ale2009,
A minha sugestão de gravar o resultado da consulta em uma tabela temporária e rodar o cursor contra a tabela temporária surgiu algum efeito ?
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.comImporte arquivos XML com o CLR
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!346.entry
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta Alessandro Falanque quarta-feira, 18 de fevereiro de 2009 18:30
-
Gustavo obrigado pela sugestao......
Vou tentar....
fasdfasfd- Marcado como Resposta Alessandro Falanque quarta-feira, 18 de fevereiro de 2009 18:30