3

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

+0

Я не знаю ответа, но учитывая, что CTP только что вышел на днях, и что люди, которые будут иметь возможность ответить на это информативно, находятся под NDA, я бы сказал, что вы вряд ли удовлетворительный ответ в ближайшее время. Тем не менее, это может пойти в любом случае. Если бы я потратил на него деньги, я бы сказал, что параметр sniffing, вероятно, всегда будет проблемой, если они не придумают способ хранения разных планов для разных параметров. –

ответ

3

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

Параметр sniffing не используется для компиляции изначально скомпилированных хранимых процедур. У всех параметров хранимой процедуры считаются значения UNKNOWN.

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

0

Насколько я знаю, когда вы создаете «родную» хранимую процедуру, она будет скомпилирована с помощью собственного кода и не будет проходить через Оптимизатор запросов. Поэтому я не думаю, что проблема с параметрическим обнюхиванием будет проблемой.

+1

Оптимизатор запросов будет вызываться во время компиляции процедур, и план выполнения будет определен в этот момент (т. Е. Будет один план выполнения для всех вызовов). – Gjorgji

 Смежные вопросы

  • Нет связанных вопросов^_^