Mam procedurę składowaną, która niesamowicie przekracza limit czasu za każdym razem, gdy jest wywoływana z aplikacji internetowej.
Uruchomiłem Sql Profiler i prześledziłem wywołania, które wygasły, i w końcu odkryłem następujące rzeczy:
- Po wykonaniu instrukcji z poziomu MS SQL Management Studio, z tymi samymi argumentami (w rzeczywistości skopiowałem wywołanie procedury ze śledzenia profilu sql i uruchomiłem je): Kończy się średnio za 5 ~ 6 sekund.
- Jednak wywołanie z aplikacji internetowej zajmuje ponad 30 sekund (w śledzeniu), więc moja strona internetowa faktycznie wygasa do tego czasu.
Poza tym, że moja aplikacja internetowa ma własnego użytkownika, wszystko jest takie samo (ta sama baza danych, połączenie, serwer itp.) Próbowałem również uruchomić zapytanie bezpośrednio w studio z użytkownikiem aplikacji internetowej i nie zajmuje to więcej niż 6 sek.
Jak dowiedzieć się, co się dzieje?
Zakładam, że nie ma to nic wspólnego z faktem, że używamy warstw BLL> DAL lub adapterów tabeli, ponieważ ślad wyraźnie pokazuje, że opóźnienie występuje w rzeczywistej procedurze. To wszystko, o czym mogę myśleć.
EDYCJA Dowiedziałem się z tego linku, że ADO.NET ustawia wartość ARITHABORT
na true - co jest dobre przez większość czasu, ale czasami tak się dzieje, a sugerowanym obejściem jest dodanie with recompile
opcji do przechowywanego proc. W moim przypadku to nie działa, ale podejrzewam, że jest to coś bardzo podobnego do tego. Czy ktoś wie, co jeszcze robi ADO.NET lub gdzie mogę znaleźć specyfikację?