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