Compartilhar via


sys.fn_validate_plan_guide (Transact-SQL)

Aplica-se a: Instância Gerenciada de SQL do Azure do SQL Server

Verifica a validade do guia de plano especificado. A sys.fn_validate_plan_guide função retorna a primeira mensagem de erro encontrada quando o guia de plano é aplicado à sua consulta. Um conjunto de linhas vazio será retornado quando a guia de plano for válida. Guias de plano podem ficar inválidos depois que são feitas alterações ao design físico do banco de dados. Por exemplo, se um guia de plano especificar um determinado índice e esse índice depois for descartado, a consulta não poderá mais usar o guia de plano.

Validando um guia de plano, você pode determinar se o guia pode ser usado pelo otimizador sem modificação. Com base nos resultados da função, você pode optar por descartar o guia de plano e redefinir a consulta ou modificar o design do banco de dados, por exemplo, recriando o índice especificado no guia de plano.

Convenções de sintaxe de Transact-SQL

Sintaxe

sys.fn_validate_plan_guide ( plan_guide_id )  

Argumentos

plan_guide_id
É a ID do guia do plano, conforme relatado na exibição do catálogo sys.plan_guides . plan_guide_id é int sem padrão.

Tabela retornada

Nome da coluna Tipo de dados Descrição
msgnum int A identificação da mensagem de erro.
severidade tinyint O nível de severidade da mensagem, entre 1 e 25.
estado smallint Número de estado do erro que indica o ponto no código no qual o erro ocorreu.
mensagem nvarchar(2048) Texto da mensagem do erro.

Permissões

Os guias de plano com escopo OBJECT exigem a permissão VIEW DEFINITION ou ALTER nas permissões e objetos mencionados para compilar a consulta ou o lote fornecido no guia de plano Por exemplo, se um lote contiver instruções SELECT, serão solicitadas permissões SELECT nos objetos mencionados.

Os guias de plano com escopo SQL ou TEMPLATE exigem a permissão ALTER nas permissões e no banco de dados para compilar a consulta ou o lote fornecido no guia de plano Por exemplo, se um lote contiver instruções SELECT, serão solicitadas permissões SELECT nos objetos mencionados.

Comentários

A sys.fn_validate_plan_guide função não está disponível no Banco de Dados SQL do Azure.

Exemplos

R. Validando todos os guias de plano em um banco de dados

O exemplo seguinte verifica a validade de todos os guias de plano no banco de dados atual. Se um conjunto de resultados vazio for retornado, todos os guias de plano serão válidos.

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. Testando a validação do guia de plano antes de implementar uma alteração no banco de dados

O exemplo seguinte usa uma transação explícita para descartar um índice. A sys.fn_validate_plan_guide função é executada para determinar se essa ação invalidará quaisquer guias de plano no banco de dados. Com base nos resultados da função, a instrução DROP INDEX será confirmada ou a transação será revertida, e o índice não será descartado.

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  

Confira também

Guias de plano
sp_create_plan_guide (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)