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)