Хранимая процедура занимает много времени при вызове из asp.net/ .ajax, но быстро выполняется как пакет - PullRequest
2 голосов
/ 28 марта 2011

Я отслеживаю с помощью профиля сервера sql сохраненный процесс, вызываемый через Ajax в asp.page.

эта процедура принимает 10 параметров, которые являются определяемыми пользователем типами таблиц (таблиц).

Давайтеназовите его MyProc.

, когда я вызываю MyProc из .ajax, в SQL Profiler оно показывает: событие «Запуск RPC» и мой процесс> 10 минут до завершения.

Когда я копирую paste [MyProcвызов скрипта] и вставьте его в SSMS (выполняется как пакет из SSMS = Batch Event (BatchStartin, BatchCompleted) в профилировщике), выполнение занимает 3 секунды. Нормально.

Кто-нибудь уже сталкивался с такой ситуацией? Любойидеи.

Ответы [ 2 ]

0 голосов
/ 28 марта 2011

Я не так хорошо разбираюсь в SQL, как раньше, но я бы попробовал перестроить хранимые процедуры.То, что вы описали, было довольно распространенным явлением, если вы строили свои хранимые процедуры в то время, когда в таблице не было данных, или характер таблицы со временем меняется.

Хранимая процедура работает так быстро, потому что она сохраняет некоторые предварительные (и трудоемкие) задачи, такие как синтаксический анализ и план запроса.Если содержимое вашей базы данных выглядело совсем не так, как сейчас, план запроса может быть далеко, и поиск данных наименее эффективным способом.Когда вы выполняете свои сценарии вне хранимой процедуры, план запроса строится с нуля в соответствии с его последним пониманием данных, которые ему необходимо искать, поэтому он будет стремительно работать со временем независимо от того, что находится в ваших таблицах или как таблицасо временем изменилось.

По сути, каждый раз, когда хранимая процедура возвращается медленнее, чем при выполнении обычного запроса, это признак того, что план запроса хранимой процедуры нуждается в обновлении.

0 голосов
/ 28 марта 2011

У меня возникла очень похожая проблема. Моя проблема была проста: для таблицы нужен индекс. Я не знаю деталей, но параметризованные запросы сделали проблему индекса намного хуже. Если я выполнял запрос без параметров, это было быстро, но с ними это было ужасно. После добавления индекса все было в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...