У меня есть параметризованный запрос, выполненный из приложения 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) истекло время ожидания?
заранее спасибо.