Wir verwenden ein ORM, das einen Aufruf von .NET an die sp_executesql gespeicherte SQL Server-Prozedur ausführt.SQL-Abfrage langsam von .NET-Code, aber nicht interaktiv
Wenn der gespeicherte Proc von .NET aufgerufen wird, erhalten wir eine Timeout-Ausnahme.
Wenn ich Profiler betrachte, kann ich sehen, dass die Abfrage tatsächlich sehr lange dauert. im Wesentlichen
Die Abfrage ist:
exec sp_executesql N'SELECT DISTINCT
FROM [OurDatabase].[dbo].[Contract] [LPLA_1]) [LPA_L1]
LEFT JOIN [OurDatabase].[dbo].[Customer] [LPA_L2] ON [LPA_L2].[Customer_ID]=[LPA_L1].[CustomerId] AND [LPA_L2].[Data]=[LPA_L1].[Data])
WHERE ((((([LPA_L1].[DealerId] = @DealerId1))
AND ([LPA_L2].[Last_Name] = @LastName2))))',N'@DealerId1 varchar(18),@LastName2 varchar(25)',@DealerId1='1234',@LastName2='SMITH'
Das verwirrende Teil für mich ist: Wenn ich kopieren und die Abfrage einfügen, die in SQL Management Studio ein Timeout ist, und führen Sie es interaktiv, es führt nur in Ordnung.
Weiß jemand, warum die gleiche Abfrage bei Ausführung über .NET-Code wesentlich länger dauern würde? (Ich bin in der Lage, dies zu reproduzieren - die Abfrage aus dem Code konsequent ausgeführt, und die Abfrage ausgeführt interaktiv konsistent funktioniert einwandfrei.)
Jede Hilfe wird geschätzt. Vielen Dank!
Wie viele Datenzeilen kehren Sie zurück? Wenn es Tausende und Abertausende von Leitungen gibt, dann könnte es Zeit brauchen, um über das Kabel zum Computer zu gehen und ein Ergebnis zurück zu erwarten. – Miles
Gibt die Abfrage viele Daten zurück? Gibt es irgendwelche Daten, die zwischen dem Server und dem Client gesendet werden, die am Programm beteiligt sind, was im interaktiven Modus nicht passiert? – quosoo
Drei in unserem Testfall. DealerID und Last_Name verfügen außerdem über Indizes. –