Я зберігав процедуру, яка шалено закінчується кожен раз, коли її викликають із веб-програми.
Я запустив Sql Profiler і простежив дзвінки, що закінчились, і нарешті з'ясував такі речі:
- Коли виконуються оператори з MS SQL Management Studio, з тими ж аргументами (насправді я скопіював виклик процедури із трасування профілю sql і запустив його): він закінчується за 5 ~ 6 секунд в середньому.
- Але при виклику з веб-програми це займає понад 30 секунд (у сліді), тому на той час у моєї веб-сторінки фактично закінчується час.
Окрім того, що у моєї веб-програми є власний користувач, все рівно однакове (одна і та ж база даних, підключення, сервер тощо), я також спробував запустити запит безпосередньо в студії з користувачем веб-програми, і це займає не більше 6 сек.
Як мені дізнатися, що відбувається?
Я припускаю, що це не має нічого спільного з тим, що ми використовуємо шари BLL> DAL або адаптери таблиці, оскільки трасування чітко показує, що затримка знаходиться у фактичній процедурі. Це все, що я можу придумати.
EDIT Я дізнався за цим посиланням, що ADO.NET встановлює ARITHABORT
значення true - що добре протягом більшої частини часу, але іноді це трапляється, і пропонується навколо - додати with recompile
опцію до збереженого proc. У моєму випадку це не працює, але я підозрюю, що це щось дуже схоже на це. Хтось знає, чим ще займається ADO.NET або де я можу знайти специфікацію?