Как SQL Server сопоставляет руководство планов запросам
SQL Server сравнивает руководства планов типа OBJECT с запросами, которые находятся внутри хранимой процедуры, триггера или функции (модуля), указанных в аргументе @module_or_batch хранимой процедуры sp_create_plan_guide. Если руководство плана существует в модуле, оно соответствует заданному запросу.
Для запросов, находящихся в пакетах, SQL Server проводит их сопоставление с руководствами планов, пытаясь сначала установить соответствие запроса руководству плана, основанного на SQL, затем параметризовать запрос и снова провести сопоставление. Следующая процедура предоставляет обзор этого процесса.
- Оптимизатор запросов SQL Server распознает выполняемый пакет как запрос на компиляцию каждой инструкции в пакете.
- Определенной инструкции пакета SQL Server пытается подобрать такое руководство плана SQL, аргумент @module_or_batch которого соответствует аргументу текста входящего пакета (включая значения констант), а аргумент @stmt также соответствует инструкции пакета. Если такое руководство плана существует и происходит совпадение, текст запроса изменяется и в него вносятся подсказки, содержащиеся в руководстве плана. Затем выполняется компиляция инструкции.
- Если руководство плана не сопоставлено с инструкцией на шаге 2, SQL Server пытается параметризовать инструкцию, используя принудительную параметризацию. На этом шаге параметризация может завершиться ошибкой по одной из следующих причин.
- Инструкция уже параметризована или содержит локальные переменные.
- Применен параметр инструкции базы данных SET PARAMETERIZATION SIMPLE (настройка по умолчанию), и не существует руководства плана типа TEMPLATE, который применяется к запросу и задает подсказку PARAMETERIZATION FORCED.
- Существует руководство плана типа TEMPLATE, который применяется к запросу и задает подсказку PARAMETERIZATION SIMPLE.
Если принудительная параметризация проводится успешно, SQL Server пытается сопоставить параметризированную форму инструкции руководству плана типа SQL, который был создан для параметризованной инструкции. Если такое руководство плана существует и происходит совпадение, текст запроса изменяется и в него вносятся подсказки, содержащиеся в руководстве плана. Затем выполняется компиляция инструкции. Если нет такого сопоставленного руководства плана, параметризованная инструкция компилируется без предварительного изменения руководством плана.
- Если на шаге 3 параметризация завершается неудачно, SQL Server снова пытается параметризовать инструкцию. На этот раз SQL Server применяет простую параметризацию, используемую по умолчанию. После чего результирующий запрос компилируется напрямую. Руководства планов не сопоставляются результатам простой параметризации.
Примечание.
Подсказка RECOMPILE игнорируется для руководства плана типа SQL, который применяется к запросам, параметризованным при помощи принудительной или простой параметризации. Также возникает предупреждение.
См. также
Основные понятия
Простая параметризация
Принудительная параметризация
Оптимизация запросов в используемых приложениях с помощью руководств планов
Другие ресурсы
Производительность запроса
sp_create_plan_guide (Transact-SQL)