Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В большинстве случаев обновление базы данных до последней версии SQL Server приведет к повышению производительности запросов. Однако если у вас есть критически важные запросы, которые были тщательно настроены для производительности, вы можете сохранить планы запросов для этих запросов перед обновлением, создав руководство по плану для каждого запроса. Если после обновления оптимизатор запросов выбирает менее эффективный план для одного или нескольких запросов, вы можете включить руководства по плану и заставить оптимизатор запросов использовать планы предварительного обновления.
Чтобы создать руководства по составлению плана перед обновлением, выполните следующие действия:
Запишите текущий план для каждого критического запроса, используя хранимую процедуру sp_create_plan_guide и указав план запроса в указании запроса USE PLAN.
Убедитесь, что к запросу применяется руководство по плану.
Обновите базу данных до более новой версии SQL Server.
Планы сохраняются в обновленной базе данных в руководствах по плану и служат резервным вариантом в случае регрессии плана после обновления.
Мы рекомендуем не включать гиды по плану после обновления, так как вы можете упустить возможности для улучшения планов в новой версии или пропустить выгодные перекомпиляции благодаря обновленной статистике.
Если после обновления выбраны менее эффективные планы, активируйте все или часть планировочных руководств для переопределения новых планов.
Пример
В следующем примере показано, как записать план предварительного обновления для запроса, создав руководство по плану.
Шаг 1. Соберите план
План запроса, записанный в руководстве по плану, должен быть в формате XML. Планы запросов в формате XML можно создать следующими способами:
Запрос к столбцу query_plan в функции динамического управления sys.dm_exec_query_plan.
Классы событий SQL Server Profiler Showplan XML, Showplan XML Statistics Profile и Showplan XML For Query Compile.
В следующем примере выполняется сбор плана запроса для инструкции SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC; путем запроса динамических административных представлений.
USE AdventureWorks;
GO
SELECT query_plan
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS APPLY sys.dm_exec_text_query_plan(qs.plan_handle, DEFAULT, DEFAULT) AS qp
WHERE st.text LIKE N'SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;%';
GO
Шаг 2. Создание руководства по плану для принудительного применения плана
Используйте XML-форматированный план запроса (полученный любым из ранее описанных методов) в руководстве по плану; скопируйте и вставьте этот план в виде строкового литерала в подсказку USE PLAN, указанную в предложении OPTION в sp_create_plan_guide.
В самом плане XML экранируйте кавычки ('), которые отображаются в плане со второй кавычки перед созданием руководства по плану. Например, план, содержащий WHERE A.varchar = 'This is a string', должен быть экранирован путем изменения кода на WHERE A.varchar = ''This is a string''.
В следующем примере создается руководство по плану запроса, собранного на шаге 1, и вставляет XML Showplan для запроса в @hints параметр. Для краткости в примере включены только частичные выходные данные Showplan.
EXECUTE sp_create_plan_guide
@name = N'Guide1',
@stmt = N'SELECT City, StateProvinceID, PostalCode FROM Person.Address ORDER BY PostalCode DESC;',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION(USE PLAN N''<ShowPlanXML xmlns=''''https://schemas.microsoft.com/sqlserver/2004/07/showplan''''
Version=''''0.5'''' Build=''''9.00.1116''''>
<BatchSequence><Batch><Statements><StmtSimple>
...
</StmtSimple></Statements></Batch>
</BatchSequence></ShowPlanXML>'')';
GO
Шаг 3: Проверьте, что план выполнения применен к запросу
Запустите запрос еще раз и проверьте созданный план запроса. Вы должны увидеть, что план соответствует тому, который вы указали в руководстве по плану.
См. также
sp_create_plan_guide (Transact-SQL)
Указания запросов (Transact-SQL)
Руководства по планированию