sys.fn_validate_plan_guide (Transact-SQL)

Aplica-se a: SQL ServerAzure SQL Managed Instance

Verifica a validade do guia do plano especificado. A sys.fn_validate_plan_guide função devolve a primeira mensagem de erro encontrada quando o guia de planos é aplicado à sua consulta. Um conjunto de linhas vazio é devolvido quando o guia do plano é válido. Os guias de planos podem tornar-se inválidos após alterações no design físico da base de dados. Por exemplo, se um guia de planos especificar um índice específico e esse índice for subsequentemente eliminado, a consulta deixará de poder ser utilizada pelo guia do plano.

Ao validar um guia de plano, pode determinar se o guia pode ser usado pelo otimizador sem modificações. Com base nos resultados da função, pode decidir eliminar o guia do plano e reajustar a consulta ou modificar o design da base de dados, por exemplo, recriando o índice especificado no guia do plano.

Transact-SQL convenções de sintaxe

Syntax

sys.fn_validate_plan_guide ( plan_guide_id )  

Arguments

plan_guide_id
O ID do guia do plano está indicado na vista de catálogo sys.plan_guides ? plan_guide_id é inteligência , sem padrão.

Tabela retornada

Nome da coluna Tipo de dados Description
msgnum int ID da mensagem de erro.
severity tinyint Nível de gravidade da mensagem, entre 1 e 25.
state smallint O número de estado do erro indica o ponto no código em que o erro ocorreu.
mensagem nvarchar(2048) Texto da mensagem com o erro.

Permissions

Guias de planos com âmbito de OBJETO requerem VIEW permissão DEFINITION ou ALTER sobre o objeto referenciado e permissões para compilar a consulta ou lote fornecido no guia do plano. Por exemplo, se um lote contiver instruções SELECT, são necessárias permissões SELECT nos objetos referenciados.

Guias de planos com âmbito SQL ou TEMPLATE requerem permissão ALTER na base de dados e permissões para compilar a consulta ou lote fornecida no guia do plano. Por exemplo, se um lote contiver instruções SELECT, são necessárias permissões SELECT nos objetos referenciados.

Remarks

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

Examples

A. Validação de todos os guias de planos numa base de dados

O exemplo seguinte verifica a validade de todos os guias de planos na base de dados atual. Se um conjunto de resultados vazio for devolvido, todos os guias de planos sã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. Validação do guia do plano de testes antes de implementar uma alteração na base de dados

O exemplo seguinte utiliza uma transação explícita para eliminar um índice. A sys.fn_validate_plan_guide função é executada para determinar se esta ação irá invalidar algum guia de plano na base de dados. Com base nos resultados da função, a DROP INDEX instrução é ou confirmada ou a transação é revertida, e o índice não é eliminado.

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  

Ver também

Guias do Plano
sp_create_plan_guide (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)