У меня есть хранимая процедура, которая безумно прерывается каждый раз, когда она вызывается из веб-приложения.
Я запустил Sql Profiler, отследил вызовы, которые истекли, и, наконец, обнаружил следующие вещи:
- Когда выполняются операторы из MS SQL Management Studio с теми же аргументами (фактически я скопировал вызов процедуры из трассировки профиля sql и запустил его): он завершается через 5 ~ 6 секунд.
- Но при вызове из веб-приложения это занимает более 30 секунд (в трассировке), поэтому моя веб-страница к тому времени истекает.
Помимо того, что у моего веб-приложения есть свой пользователь, все одинаково (та же база данных, соединение, сервер и т. Д.)
Я также попытался выполнить запрос непосредственно в студии с пользователем веб-приложения, и это заняло не более 6 секунд.
Как мне узнать, что происходит?
Я предполагаю, что это не имеет никакого отношения к тому факту, что мы используем слои BLL> DAL или адаптеры таблиц, поскольку трассировка четко показывает, что задержка в реальной процедуре. Это все, что я могу придумать.
РЕДАКТИРОВАТЬ Я обнаружил в по этой ссылке , что ADO.NET устанавливает ARITHABORT
в true - что хорошо в большинстве случаев, но иногда это происходит, и предлагаемая работа -around - добавить опцию with recompile
в сохраненный процесс. В моем случае это не работает, но я подозреваю, что это очень похоже на это. Кто-нибудь знает, что еще ADO.NET делает или где я могу найти спецификацию?