Używamy ORM, który wykonuje wywołanie z .NET do przechowywanej procedury sp_executesql programu SQL Server.Zapytanie SQL spowalnia z kodem .NET, ale nie interakcyjnie
Kiedy przechowywany proc zostaje wywołany z .NET, otrzymujemy wyjątek timeout.
Patrząc na Profiler, widzę, że wykonanie zapytania zajmuje naprawdę dużo czasu.
Kwerenda jest w istocie:
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'
Mylące część dla mnie jest taka: Jeśli mogę skopiować i wkleić kwerendę, która jest odmierzanie w SQL Management Studio i wykonać go interaktywnie, wykonuje dobrze.
Czy ktoś wie, dlaczego to samo zapytanie trwałoby znacznie dłużej podczas wykonywania przez kod .NET? (Mogę to odtworzyć - kwerenda wykonana z kodu konsekwentnie kończy się, a zapytanie wykonywane interaktywnie konsekwentnie działa poprawnie.)
Każda pomoc jest doceniana. Dzięki!
Ile linii danych wracasz? Jeśli istnieją tysiące linii, to może to zająć trochę czasu, aby przepchnąć przewód do komputera, oczekując wyniku z powrotem. – Miles
Czy zapytanie zwraca dużo danych? Czy istnieje jakakolwiek transmisja danych między serwerem a klientem biorącym udział w przypadku programu, który nie występuje w trybie interaktywnym? – quosoo
Trzy w naszym przypadku testowym. Ponadto, DealerID i Last_Name mają indeksy. –