Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que a consulta do Microsoft SQL Server 2012 leva minutos no JDBC 4.0, mas segundo(s) no Management Studio?


O buffer adaptativo é uma boa resposta. Eu também recomendaria verificar o SET das conexões opções via SQL Server Profiler.

Ao iniciar um rastreamento, certifique-se de que ExistingConnections é selecionado. Compare um SPID de uma conexão JDBC e uma conexão SSMS. ARITHABORT vem à mente como um que eu vi causar uma diferença no desempenho entre o driver SSMS e JDBC. A Microsoft menciona brevemente aqui:http://msdn.microsoft.com/en-us/library/ms190306.aspx. Stack Exchange informações aqui:https://dba.stackexchange.com/questions/9840/why-would-set-arithabort-on-dramatically-speed-up-a-query

No Oracle, tenho visto grandes impactos ao brincar com o setFetchSize método na Statement / PreparedStatement objeto. Aparentemente, o driver do SQL Server não oferece suporte a esse método. No entanto, existe um método interno no driver para isso. Consulte Definir uma pré-busca de linha padrão no SQL Server usando o driver JDBC para obter detalhes.

Além disso, o que você está fazendo em seu while (rs.next()) ciclo? Tente não fazer nada além de ler uma coluna, como rs.getInt(1) . Veja o que acontece. Se ele voar, isso sugere que o gargalo está no seu processamento anterior do conjunto de resultados. Se ainda estiver lento, o problema deve estar no driver ou no banco de dados.

Você pode usar o SQL Server Profiler para comparar as execuções conforme elas chegam via JDBC e conforme você as executa via SSMS. Compare a CPU, leituras, gravações e duração. Se forem diferentes, o plano de execução provavelmente é diferente, o que me leva de volta à primeira coisa que mencionei:o SET opções.