To pytanie nie tyle dotyczy znalezienia rozwiązania, jak uzyskania wyjaśnienia dla zachowania bizarrest, jakie kiedykolwiek widziałem z serwera SQL.Wydajność procedury zapisanej - jest WILD?
miałem procedurę przechowywaną z następującym podpisem:
alter procedure MySP @param1 uniqueidentifier,
@param2 uniqueidentifier,
@param3 uniqueidentifier
otrzymuje pewien zbiór parametrów, to Proc brał bardzo długi czas uruchamiania z C# (przy użyciu SqlCommand.ExecuteReader()
) - około 2 minut. Przy użyciu tych samych parametrów w bezpośredniej sesji zapytania, SP uruchomił się w ciągu 2 sekund.
Zajęło to dużo czasu, a ja nawet nie starają się wyjaśnić, jak natknęliśmy się na to rozwiązanie, ale to, co zrobiliśmy:
Na początku SP, zadeklarowaliśmy 3 zmienne lokalne i przypisane im wartości parametrów, tak jak:
declare @param1_copy uniqueidentifier,
@param2_copy uniqueidentifier,
@param3_copy uniqueidentifier
select @param1_copy = @param1,
@param2_copy = @param2,
@param3_copy = @param3
a następnie w pozostałej części SP my podstawiony wszystkie odniesienia do parametrów wejściowych z lokalnej kopii.
Voila. SP wykonano w mniej niż 2 sekundy. A zespół tutaj jest oszołomiony.
A teraz, panie i panowie, czy ktoś może wyjaśnić to zachowanie?
Niesamowite. Natknęliśmy się na rozwiązanie podręcznika, nie zdając sobie z tego sprawy! –