Resumidamente,
-
%código%
- teoricamente requer mais recursos do lado do servidor do que
selectMethod=cursor
- carrega apenas no máximo tamanho do lote registros na memória do cliente de uma só vez, resultando em uma pegada de memória do cliente mais previsível
- teoricamente requer mais recursos do lado do servidor do que
-
%código%
- teoricamente requer menos recursos do lado do servidor do que
selectMethod=direct
- lerá todo o conjunto de resultados na memória do cliente (a menos que o driver suporte nativamente a recuperação do conjunto de resultados assíncronos) antes que o aplicativo cliente possa iterá-lo; isso pode reduzir o desempenho de duas formas :
- reduz o desempenho com conjuntos de resultados grandes se o aplicativo cliente for gravado de modo a interromper o processamento após percorrer apenas uma fração do conjunto de resultados (com
selectMethod=direct
ele já pagou o custo de recuperar dados que essencialmente lançará away; comselectMethod=cursor
o desperdício é limitado a no máximo tamanho de lote - 1 linhas - a condição de término antecipado provavelmente deve ser recodificada no SQL, eg comodirect
ou funções de janela) - reduziu o desempenho com grandes conjuntos de resultados devido à potencial coleta de lixo e / ou problemas de falta de memória associados a um aumento de espaço ocupado pela memória
- reduz o desempenho com conjuntos de resultados grandes se o aplicativo cliente for gravado de modo a interromper o processamento após percorrer apenas uma fração do conjunto de resultados (com
- teoricamente requer menos recursos do lado do servidor do que
Em resumo,
-
Pode usar
cursor
menor desempenho do aplicativo? - qualquer método pode diminuir o desempenho, por diferentes motivos. Depois de um determinado tamanho do conjunto de resultados,SELECT TOP
ainda pode ser preferível. Veja abaixo para quando usar um ou outro -
O
selectMethod=cursor
é uma configuração transparente de aplicativo em uma conexão JDBC? - é transparente, mas ainda pode quebrar o aplicativo se o uso de memória aumentar o suficiente para sobrecarregar o sistema cliente (e, correspondentemente, seu servidor) ou travar completamente o cliente -
Mais geralmente, quando você deve usar
cursor
vsselectMethod=
? - Eu pessoalmente usocursor
ao lidar com conjuntos de resultados potencialmente grandes ou ilimitados. A sobretaxa de ida e volta é então amortizada, dado um tamanho de lote grande o suficiente, e a pegada de memória do meu cliente é previsível. Eu usodirect
quando o tamanho do conjunto de resultados que eu esperava é conhecido por ser inferior ao tamanho de lote que eu uso comcursor
, ou ligado de alguma forma, ou quando a memória não é um problema.
Felicidades, V.