Медленный вызов SP через LINQ или SqlCommand, но не с EXECUTE

У меня есть довольно сложная хранимая процедура в MS SQL Server, которая запрашивает большую базу данных. Я сделал много оптимизаций, поэтому, когда я вызываю его с помощью EXECUTE из SSMS, он выполняется менее 1 секунды, что достаточно хорошо.

Проблема в том, что когда я вызываю его из ASP.NET 3.5 с помощью LINQ или SqlCommand, на рабочем сервере это занимает несколько минут, а нагрузка на сервер даже не высока.

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

На производственном сервере установлен SQL Express 2008 sp2, на сервере разработки установлен SQL Express 2005. На моей машине разработки установлен SQL Express 2008 R2, и он работает хорошо.

Что/где я должен проверить?

ty!


person FTeR    schedule 25.04.2011    source источник
comment
Пробовали ли вы использовать профилировщик SQL Server, чтобы увидеть, какой SQL на самом деле отправляется на рабочий сервер? Кроме того, сравнивали ли вы планы запросов для одной и той же хранимой процедуры в разработке и производстве?   -  person R0MANARMY    schedule 26.04.2011
comment
@R0MANARMY: Аудит входа в систему; RPC: Завершено (длительность: 1231); Аудит выхода из системы (длительность: 1236); Тестовый .aspx имеет только представление сетки, ничего другого, а программный код имеет только вызов sp и работает почти 3 минуты, если я установил достаточно большое время ожидания.   -  person FTeR    schedule 26.04.2011
comment
Если вы запустите запрос из SSMS к рабочей среде, он все равно завершится через 1 минуту?   -  person R0MANARMY    schedule 26.04.2011
comment
@R0MANARMY: да, в правом нижнем углу указано 00:00:01.   -  person FTeR    schedule 26.04.2011
comment
Вы пытались использовать l2sprof, который рекомендовал Фрэнсис, чтобы увидеть, что на самом деле отправляется на SQL-сервер и т. д.? Кроме того, рассматривали ли вы, вызвана ли медлительность самим запросом или чем-то связанным со средой, подключением к серверу БД требуется больше времени для установления или другими накладными расходами?   -  person R0MANARMY    schedule 26.04.2011
comment
Звучит как мошеннический план запроса - у вас есть другой экземпляр, который позволил бы вам запускать хранимую процедуру через связанный сервер (т.е. exec production.mydb.myschema.myprocedure из другого экземпляра) - он, вероятно, будет работать так же плохо, как через SqlCommand   -  person Rowland Shaw    schedule 12.09.2011


Ответы (1)


Проверьте это с помощью SQL Profiler. LINQ to SQL, скорее всего, будет страдать от проблемы Select n + 1.

Посмотрите здесь: http://l2sprof.com/Learn/Alerts/SelectNPlusOne

person Francis Gilbert    schedule 25.04.2011
comment
К сожалению, нет, я протестировал вызов sp на отдельной странице и все еще работает медленно. Он возвращает список целых чисел. - person FTeR; 26.04.2011