Поделиться через


sys.fn_validate_plan_guide (Transact-SQL)

Область применения: SQL Server Управляемый экземпляр SQL Azure

Проверяет допустимость указанного руководства плана. Функция sys.fn_validate_plan_guide возвращает первое сообщение об ошибке, которое возникает при применении руководства по плану к запросу. Если структура плана допустима, возвращается пустой набор строк. Структуры планов могут стать недопустимыми после внесения изменений в физическую структуру базы данных. Например, если в структуре плана указан конкретный индекс, который впоследствии удаляется, данная структура плана больше не может быть использована для запроса.

С помощью проверки допустимости структуры плана можно определить, возможно ли ее использование оптимизатором без изменения. Основываясь на результатах выполнения функции, можно принять решение об удалении структуры плана и повторной настройке запроса или об изменении структуры базы данных, например с помощью повторного создания индекса, указанного в структуре плана.

Соглашения о синтаксисе Transact-SQL

Синтаксис

sys.fn_validate_plan_guide ( plan_guide_id )  

Аргументы

plan_guide_id
Идентификатор руководства по плану, как показано в представлении каталога sys.plan_guides . plan_guide_id не используется без значения по умолчанию.

Возвращаемая таблица

Имя столбца Тип данных Description
msgnum int Идентификатор сообщения об ошибке.
severity tinyint Степень серьезности сообщения, от 1 до 25.
state smallint Номер состояния ошибки, отмеченной точкой в коде, в котором она произошла.
message nvarchar(2048) Текст сообщения ошибки.

Разрешения

Для руководств планов области OBJECT требуются разрешения VIEW DEFINITION или ALTER на соответствующий объект и разрешения на компиляцию запроса или пакета, представленного в структуре плана. Например, если пакет содержит инструкции SELECT, необходимы разрешения SELECT на соответствующие объекты.

Для структур планов области SQL или TEMPLATE требуются разрешение ALTER на базу данных и разрешения на компиляцию запроса или пакета, представленного в структуре плана. Например, если пакет содержит инструкции SELECT, необходимы разрешения SELECT на соответствующие объекты.

Замечания

Функция sys.fn_validate_plan_guide недоступна в База данных SQL Azure.

Примеры

А. Проверка допустимости всех руководств планов в базе данных

В следующем примере выполняется проверка допустимости всех структур планов в текущей базе данных. Если возвращается пустой результирующий набор строк, значит все структуры планов допустимы.

USE AdventureWorks2022;  
GO  
SELECT plan_guide_id, msgnum, severity, state, message  
FROM sys.plan_guides  
CROSS APPLY fn_validate_plan_guide(plan_guide_id);  
GO  

B. Тестирование проверки руководства плана перед изменением базы данных

В следующем примере используется явная транзакция для удаления индекса. Функция sys.fn_validate_plan_guide выполняется, чтобы определить, будет ли это действие недействительными любые руководства по плану в базе данных. В зависимости от результатов выполнения этой функции инструкция DROP INDEX фиксируется либо выполняется откат транзакции, а индекс не удаляется.

USE AdventureWorks2022;  
GO  
BEGIN TRANSACTION;  
DROP INDEX IX_SalesOrderHeader_CustomerID ON Sales.SalesOrderHeader;  
-- Check for invalid plan guides.  
IF EXISTS (SELECT plan_guide_id, msgnum, severity, state, message  
           FROM sys.plan_guides  
           CROSS APPLY sys.fn_validate_plan_guide(plan_guide_id))  
    ROLLBACK TRANSACTION;  
ELSE  
    COMMIT TRANSACTION;  
GO  

См. также

Руководства планов
sp_create_plan_guide (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)