Почему некоторые соединения занимают очень много времени, а другие работают быстро? - PullRequest
3 голосов
/ 11 ноября 2011

У меня есть веб-страница, которая подключается к экземпляру SQL Server 2008, пытаясь последовательно выполнить две хранимые процедуры. Первый завершается успешно, а затем значения из первого передаются второму. Этот запрос истекает примерно через 110 секунд.

Если я открываю соединение с экземпляром SQL с помощью SQLDbx и выполняю хранимую процедуру, она завершается, но занимает 108 секунд (подозрительно близко к 110 для версии ADO).

Однако, если я открою соединение с Консолью управления SQL Server (2008) и выполню sproc, запрос вернется через 4 секунды с двумя строками данных.

Я подозреваю какую-то проблему с драйверами, но я не совсем уверен, где искать. Я надеюсь, что какое-то изменение конфигурации (на сервере или на клиенте ADO) могло бы это исправить, но до сих пор мои поиски ответов через Google не дали никаких полезных советов.

Так что я обращаюсь к вам.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

ADO имеет проблемы с хранимыми процедурами :

Query Analyzer работает с ARITHABORT, установленным на ON, а ADO.Net работает с ARITHABORT, установленным на OFF. Это вызывает 2 плана запросов в кеше процедур. В зависимости от параметров в запросе эти планы могут быть разными, и, следовательно, обеспечивать очень разную производительность запроса.
...
Поэтому, когда вы получаете эту проблему, лучше всего использовать подсказку WITH RECOMPILE составлять план выполнения каждый раз, когда вы запускаете процедуру.

Попробуйте что-то вроде:
EXEC sp_MyTable1 'Parameter1', 'Parameter2' WITH RECOMPILE
И посмотрите, работает ли запрос лучше в ADO.

0 голосов
/ 11 ноября 2011

NOCOUNT выключен в обеих хранимых процедурах?

...