sql >> Database >  >> RDS >> Sqlserver

Waarom duurt een Microsoft SQL Server 2012-query minuten via JDBC 4.0, maar seconden in Management Studio?

De adaptieve buffering is een goed antwoord. Ik zou ook aanraden de verbindingen te controleren' SET opties via SQL Server Profiler.

Wanneer u een tracering start, zorg er dan voor dat ExistingConnections is geselecteerd. Vergelijk een SPID van een JDBC-verbinding en een SSMS-verbinding. ARITHABORT komt in me op als een die ik heb gezien die een verschil in prestatie veroorzaakt tussen SSMS en JDBC-stuurprogramma. Microsoft noemt het hier kort:http://msdn.microsoft.com/en-us/library/ms190306.aspx. Stack Exchange-informatie hier:https://dba.stackexchange.com/questions/9840/why-would-set-arithabort-on-dramatically-speed-up-a-query

Op Oracle heb ik enorme effecten gezien door te spelen met de setFetchSize methode op de Statement / PreparedStatement voorwerp. Blijkbaar ondersteunt het SQL Server-stuurprogramma die methode niet. Er is echter een interne methode in de driver voor. Zie Een standaard rij-prefetch instellen in SQL Server met JDBC-stuurprogramma voor details.

En wat doe je in je while (rs.next()) lus? Probeer niets anders te doen dan een kolom te lezen, zoals rs.getInt(1) . Kijken wat er gebeurt. Als het vliegt, suggereert dat het knelpunt in uw eerdere verwerking van de resultatenset. Als het nog steeds traag is, moet het probleem in het stuurprogramma of de database zitten.

U kunt SQL Server Profiler gebruiken om de uitvoeringen te vergelijken zoals ze binnenkomen via JDBC en terwijl u deze uitvoert via SSMS. Vergelijk de CPU, leest, schrijft en duur. Als ze anders zijn, dan is het uitvoeringsplan waarschijnlijk anders, wat me terugverwijst naar het eerste dat ik noemde:de SET opties.



  1. Hoe MySQL-tijd te converteren

  2. MySQL UPDATE:Top 5 tips voor T-SQL-ontwikkelaars

  3. Ongestructureerde inhoud:een onaangeboorde brandstofbron voor AI en machine learning

  4. PDO haalt één kolom uit de tabel op in een 1-dimensionale array