Partilhar via


sys.fn_validate_plan_guide (Transact-SQL)

Verifica a validade do guia de plano especificado. A função sys.fn_validate_plan_guide retorna a primeira mensagem de erro encontrada quando o guia de plano é aplicado à 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.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

sys.fn_validate_plan_guide ( plan_guide_id )

Argumentos

  • plan_guide_id
    É o ID do guia de plano mencionado 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

Identificador da mensagem de erro.

severity

tinyint

Nível de severidade da mensagem, entre 1 e 25.

state

smallint

Número de estado do erro que indica o ponto no código no qual o erro ocorreu.

message

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.

Exemplos

A. 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 AdventureWorks;
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 função sys.fn_validate_plan_guide é executada para determinar se esta ação invalidará qualquer guia 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 AdventureWorks;
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