Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum dauert die Abfrage von Microsoft SQL Server 2012 Minuten über JDBC 4.0, aber Sekunden in Management Studio?

Die adaptive Pufferung ist eine gute Antwort. Ich würde auch empfehlen, das SET der Verbindungen zu überprüfen Optionen über SQL Server Profiler.

Stellen Sie beim Starten einer Ablaufverfolgung sicher, dass ExistingConnections ist ausgewählt. Vergleichen Sie eine SPID von einer JDBC-Verbindung und einer SSMS-Verbindung. ARITHABORT kommt mir als einer in den Sinn, den ich gesehen habe, um einen Leistungsunterschied zwischen SSMS- und JDBC-Treiber zu verursachen. Microsoft erwähnt es kurz hier:http://msdn.microsoft.com/en-us/library/ms190306.aspx. Stack Exchange-Informationen finden Sie hier:https://dba.stackexchange.com/questions/9840/why-would-set-arithabort-on-dramatically-speed-up-a-query

Bei Oracle habe ich große Auswirkungen gesehen, wenn ich mit setFetchSize herumgespielt habe Methode auf der Statement / PreparedStatement Objekt. Anscheinend unterstützt der SQL Server-Treiber diese Methode nicht. Es gibt jedoch eine interne Methode im Treiber dafür. Weitere Informationen finden Sie unter Festlegen eines standardmäßigen Zeilenvorabrufs in SQL Server mithilfe des JDBC-Treibers.

Außerdem, was machst du in deinem while (rs.next()) Schleife? Versuchen Sie, nichts anderes zu tun, als eine Spalte zu lesen, wie rs.getInt(1) . Schau was passiert. Wenn es nicht funktioniert, deutet dies darauf hin, dass der Engpass in Ihrer früheren Verarbeitung der Ergebnismenge liegt. Wenn es immer noch langsam ist, muss das Problem im Treiber oder in der Datenbank liegen.

Sie könnten SQL Server Profiler verwenden, um die Ausführungen zu vergleichen, wenn sie über JDBC eingehen, und während Sie sie über SSMS ausführen. Vergleichen Sie CPU, Lesevorgänge, Schreibvorgänge und Dauer. Wenn sie unterschiedlich sind, dann ist wahrscheinlich auch der Ausführungsplan unterschiedlich, was mich auf das erste erwähnte zurückführt:das SET Optionen.