Решает ли Sql Server 2014 "Hekaton" скомпилированные хранимые процедуры проблемы с перехватом параметров?

Оптимизация таблиц в памяти "Хекатон" SQL Server 2014 провозглашает "Собственная компиляция бизнес-логики в хранимых процедурах". Однако из-за проблем с "анализом параметров" (см. Здесь и здесь) в SQL Server 2012 и более ранних версиях мне всегда приходилось проектировать большинство моих хранимых процедур с OPTIMIZE FOR UNKNOWN (или его эквивалент). Это эффективно предотвращает кэширование планов запросов и заставляет SQL Server перекомпилировать / повторно оптимизировать запросы при каждом их выполнении. Учитывая значительную часть прироста производительности Hekaton, вызванного повторным использованием собственных скомпилированных запросов, SQL Server 2014 делает что-нибудь для решения проблемы перехвата параметров, чтобы я мог фактически использовать скомпилированные запросы?

2 ответа

Решение

Интерпретируемые хранимые процедуры Transact-SQL компилируются во время первого выполнения, в отличие от хранимых процедур, изначально скомпилированных (иначе как Hekaton), которые компилируются во время создания (и, таким образом, план выполнения запроса определяется во время создания). Когда интерпретированные хранимые процедуры компилируются при вызове, значения параметров, предоставленных для этого вызова, используются оптимизатором при генерации плана выполнения. Такое использование параметров во время компиляции называется анализом параметров.

Обнаружение параметров не используется для компиляции хранимых процедур, скомпилированных собственными силами. Считается, что все параметры хранимой процедуры имеют НЕИЗВЕСТНЫЕ значения.

В качестве обходного пути вы можете использовать OPTIMIZE FOR для указания оптимизатору запросов использовать определенное значение для переменной / параметра при компиляции процедуры.

Насколько я знаю, когда вы создаете "нативную" хранимую процедуру, она сразу же скомпилируется в нативный код и не проходит через Query Optimizer. Так что я не думаю, что проблема "перехвата параметров" будет проблемой.