Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Область применения: 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)