Ich habe eine MS SQL-Abfrage dauert etwa 40 Sekunden in ASP.NET (EF Linq) ausgeführt werden. Ich habe es in Profiler erfasst und es zeigt eine Dauer von etwa 40 Sekunden:Abfrage ist sehr langsam in ASP.net und Profiler, aber schnell in SQL Management Studio 2014
Allerdings, wenn ich Kopieren/Einfügen dieser in SQL Management Studio es in 0.00.00 Sekunden läuft. Es ist eine einfache select
auf einer einzigen Tabelle (keine Joins, Ansichten, Stored Procedure) und es gibt etwa 10.000 Zeilen zurück.
Ausführungsplan:
Ich las this question on StackOverflow Hexe Punkte auf this blog und platziert
SET ARITHABORT OFF
über der Abfrage in Management Studio, aber das doesn‘ t mach es langsam, also glaube ich nicht, dass das das Problem ist.
Eine seltsame Sache ist, dass wir die Anwendung mit Windows 2012/SQL 2014 Web Edition auf einen schnelleren Server migriert haben und seit dieser Zeit scheinen Abfragen langsamer zu laufen. Die gleiche Abfrage lief auf unserem alten Windows 2008R2 Server mit SQL Express 2008R2 sehr viel schneller.
Es gibt eine Reihe von "SET" -Optionen, die * signifikante * Auswirkungen haben können und die nicht standardmäßig dieselben sind. Das erste, was ich versuchen würde, wäre etwas wie https://www.mssqltips.com/sqlservertip/1415/determining-set-options-for-current-session-in-sql-server/ sowohl in SSMS und über RAW ADO.NET (Sie müssen möglicherweise die Abfrage hacken, um es freundlich zu machen, da "PRINT" ist ein Schmerz von ADO.NET zu verwenden, aber: vielleicht nur @@ OPTIONS in beiden wählen ist genug). Sehen Sie, welche Flags (falls vorhanden) unterschiedlich sind. Ich werde es vor Ort als Kontrolle versuchen. –
Hmm, vor Ort zu überprüfen, das einzige Delta ist 'ARITHABORT', das Sie bereits handhaben. Ich frage mich dann, ob dies eine schlechte Parameteroptimierung/Abfrageplangenerierung ist. Wenn Sie das SQL selbst schreiben, können Sie die Hinweise 'OPTIMIZE FOR'/'UNKNOWN' verwenden. Wenn Sie das SQL nicht selbst schreiben: dann ... ja, das ist ein Toughie. Das müssen wir ziemlich oft machen - seltsamerweise nennen wir das intern das "Jon Skeet/new user Problem" - das Layout unserer Daten neigt dazu, für neue Nutzer und massiv engagierte Nutzer wie Jon massiv verzerrt zu sein. –
@Marc, danke für deine Hilfe. SQL Studio gibt 'Optionen = 5496', aber von meiner Anwendung (erstellt eine' IDbConnection' im Entity Framework Kontext) gibt es 'Optionen = 5432'. Der Unterschied ist in der Tat "ARITHABORT". – roberth