Em JDBC, o
setFetchSize(int)
O método é muito importante para o desempenho e gerenciamento de memória na JVM, pois controla o número de chamadas de rede da JVM para o banco de dados e, correspondentemente, a quantidade de RAM usada para o processamento do ResultSet. Inerentemente, se setFetchSize(10) está sendo chamado e o driver está ignorando, provavelmente há apenas duas opções:
- Tente um driver JDBC diferente que respeite a dica de tamanho de busca.
- Veja as propriedades específicas do driver na conexão (URL e/ou mapa de propriedades ao criar a instância de conexão).
O RESULT-SET é o número de linhas empacotadas no banco de dados em resposta à consulta. chamadas e a RAM resultante necessária para o processamento depende da configuração do tamanho da busca.
Portanto, se RESULT-SET tiver 100 linhas e o tamanho de busca for 10, haverá 10 chamadas de rede para recuperar todos os dados, usando aproximadamente 10*{row-content-size} RAM a qualquer momento.
O tamanho de busca padrão é 10, o que é bastante pequeno. No caso postado, parece que o driver está ignorando a configuração de tamanho de busca, recuperando todos os dados em uma chamada (grande requisito de RAM, chamadas de rede mínimas ideais).
O que acontece abaixo de
ResultSet.next()
é que ele não busca uma linha por vez do RESULT-SET. Ele busca isso do ROW-SET (local) e busca o próximo ROW-SET (invisivelmente) do servidor à medida que ele se esgota no cliente local. Tudo isso depende do driver, pois a configuração é apenas uma 'dica', mas na prática descobri que é assim que funciona para muitos drivers e bancos de dados (verificados em muitas versões do Oracle, DB2 e MySQL).