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.
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
Consulte também