sys.fn_validate_plan_guide (Transact-SQL)
Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure
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)