sql >> Base de Datos >  >> RDS >> Sqlserver

¿Por qué la consulta de Microsoft SQL Server 2012 toma minutos sobre JDBC 4.0 pero segundos en Management Studio?

El almacenamiento en búfer adaptativo es una buena respuesta. También recomendaría verificar las conexiones SET opciones a través de SQL Server Profiler.

Cuando inicie un seguimiento, asegúrese de que ExistingConnections es seleccionado. Compare un SPID de una conexión JDBC y una conexión SSMS. ARITHABORT me viene a la mente como uno que he visto que causa una diferencia en el rendimiento entre SSMS y el controlador JDBC. Microsoft lo menciona brevemente aquí:http://msdn.microsoft.com/en-us/library/ms190306.aspx. Información de Stack Exchange aquí:https://dba.stackexchange.com/questions/9840/why-would-set-arithabort-on-dramatically-speed-up-a-query

En Oracle, he visto grandes impactos jugando con setFetchSize método en la Statement / PreparedStatement objeto. Aparentemente, el controlador de SQL Server no admite ese método. Sin embargo, hay un método interno en el controlador para ello. Consulte Establecer una captación previa de fila predeterminada en SQL Server mediante el controlador JDBC para obtener más detalles.

Además, ¿qué estás haciendo en tu while (rs.next()) ¿círculo? Intenta no hacer nada más que leer una columna, como rs.getInt(1) . Mira qué pasa. Si vuela, eso sugiere que el cuello de botella está en su procesamiento anterior del conjunto de resultados. Si todavía es lento, entonces el problema debe estar en el controlador o en la base de datos.

Puede usar SQL Server Profiler para comparar las ejecuciones a medida que ingresan a través de JDBC y cuando las ejecuta a través de SSMS. Compara la CPU, las lecturas, las escrituras y la duración. Si son diferentes, entonces el plan de ejecución probablemente sea diferente, lo que me remite a lo primero que mencioné:el SET opciones.