sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor tager Microsoft SQL Server 2012-forespørgsler minutter over JDBC 4.0, men sekund(er) i Management Studio?

Den adaptive buffering er et godt svar. Jeg vil også anbefale at tjekke forbindelsernes SET muligheder via SQL Server Profiler.

Når du starter en sporing, skal du sørge for ExistingConnections er valgt. Sammenlign en SPID fra en JDBC-forbindelse og en SSMS-forbindelse. ARITHABORT kommer til at tænke på som en, som jeg har set forårsage en forskel i ydeevne mellem SSMS og JDBC driver. Microsoft nævner det kort her:http://msdn.microsoft.com/en-us/library/ms190306.aspx. Stack Exchange-oplysninger her:https://dba.stackexchange.com/questions/9840/why-would-set-arithabort-on-dramatically-speed-up-a-query

På Oracle har jeg set enorme konsekvenser ved at spille med setFetchSize metode på Statement / PreparedStatement objekt. Tilsyneladende understøtter SQL Server-driveren ikke denne metode. Der er dog en intern metode i driveren til det. Se Angiv en standardrækkeforhåndshentning i SQL Server ved hjælp af JDBC-driver for detaljer.

Hvad laver du også i din while (rs.next()) sløjfe? Prøv ikke at gøre andet end at læse en kolonne, såsom rs.getInt(1) . Se hvad der sker. Hvis det flyver, tyder det på, at flaskehalsen er i din tidligere behandling af resultatsættet. Hvis det stadig er langsomt, så skal problemet være i driveren eller databasen.

Du kan bruge SQL Server Profiler til at sammenligne udførelserne, når de kommer ind via JDBC, og når du kører det via SSMS. Sammenlign CPU, læsninger, skrivninger og varighed. Hvis de er forskellige, så er udførelsesplanen sandsynligvis anderledes, hvilket peger mig tilbage til det første, jeg nævnte:SET muligheder.



  1. Kan en INNER JOIN tilbyde bedre ydeevne end EKSISTERER

  2. Sådan får du værdier, der ikke indeholder tal i MariaDB

  3. Mysql indsæt tilfældig datotid i et givet dato- og tidsinterval

  4. Hvor mange brugere kan få adgang til support?