Параметр SQL Server 2008 (перекомпилировать) - PullRequest
3 голосов
/ 25 ноября 2011

У меня есть параметризованный запрос, выполненный из приложения ASP.NET, которое выполняется в SQL Server с помощью оператора sp_executesql

e.g. 
exec sp_executesql N'SELECT [COL1], [COL2]  FROM [MyView] 
WHERE (([COL1] = @PARM1) AND ([COL2] = @PARAM2 ) 
ORDER BY [COL3]',N'@PARAM1 int,@PARM2 int,@',@PARAM1=21,@PARM2=255

Этот запрос выполнялся долго (и время ожидания) в производственной среде, но не в среде тестирования.

Быстрый анализ определил, что базовым таблицам нужны правильные индексы - и добавление дополнительных индексов в производственной среде и разделение данных решили проблему производительности в производственной среде.

Однако неясно, почему в среде тестирования такой проблемы не было вообще. После дальнейшего расследования мы определили:

1) Все настройки хоста / гостя ВМ, сервера, настройки ОС, которые мы могли найти, были одинаковыми:

2) Версии SQL Server 2008 были другими. Среда тестирования (все еще) имеет RTM-версию (10.0.1600.22), а рабочая версия имеет SP2 (10.0.4064.0)

3) Когда мы добавили OPTION (RECOMPILE) в приведенный выше оператор SQL, запрос выполнялся правильно во всех средах.

4) Были проблемы с OPTION (RECOMPILE) в ретроспективе RTM - есть некоторая документация / сообщения по этому поводу, но мне не ясно, как это объяснить.

Мой вопрос:

На техническом уровне, почему намного более старая версия RTM будет работать нормально без OPTION (RECOMPILE), но для самой новой версии (SP2) истекло время ожидания?

заранее спасибо.

1 Ответ

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

Была ли дополнительная нагрузка на рабочий сервер (либо в этой базе данных, либо в любом месте на сервере SQL, или, возможно, даже на отдельной задаче на сервере), которого не было на тестовом сервере?

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