sys.fn_validate_plan_guide (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Managed Instance

Comprueba la validez de la guía de plan especificada. La sys.fn_validate_plan_guide función devuelve el primer mensaje de error que se encuentra cuando se aplica la guía de plan a su consulta. Se devuelve un conjunto de filas vacío cuando la guía de plan es válida. Las guías de plan pueden volverse no válidas una vez realizados los cambios en el diseño físico de la base de datos. Por ejemplo, si una guía de plan especifica un índice determinado y se quita después dicho índice, la consulta ya no podrá utilizar la guía de plan.

Al validar una guía de plan, es posible determinar si el optimizador puede utilizar la guía sin ninguna modificación. En función de los resultados de la función, puede decidir quitar la guía de plan y reajustar la consulta o modificar el diseño de la base de datos, por ejemplo, recreando el índice especificado en la guía de plan.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sys.fn_validate_plan_guide ( plan_guide_id )  

Argumentos

plan_guide_id
Es el identificador de la guía de plan tal y como se indica en la vista de catálogo de sys.plan_guides . plan_guide_id es int sin valor predeterminado.

Tabla devuelta

Nombre de la columna Tipo de datos Descripción
msgnum int Id. del mensaje de error.
severity tinyint Nivel de gravedad del mensaje, entre 1 y 25.
state smallint Número de estado del error que indica el punto dentro del código donde se produjo el error.
message nvarchar(2048) Texto del mensaje del error.

Permisos

Las guías de plan de ámbito OBJECT requieren el permiso VIEW DEFINITION o ALTER en el objeto al que se hace referencia y permisos para compilar la consulta o lote proporcionado en la guía de plan. Por ejemplo, si un lote contiene las instrucciones SELECT, se requieren los permisos SELECT en los objetos a los que se hace referencia.

Las guías de plan de ámbito SQL o TEMPLATE requieren el permiso ALTER en la base de datos y permisos para compilar la consulta o lote proporcionado en la guía de plan. Por ejemplo, si un lote contiene las instrucciones SELECT, se requieren los permisos SELECT en los objetos a los que se hace referencia.

Comentarios

La sys.fn_validate_plan_guide función no está disponible en Azure SQL Database.

Ejemplos

A. Validar todas las guías de plan en una base de datos

El ejemplo siguiente comprueba la validez de todas las guías de plan en la base de datos actual. Si se devuelve un conjunto de resultados vacío, todas las guías de plan son válidas.

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. Validar la guía de plan de prueba antes de implementar un cambio en la base de datos

El ejemplo siguiente utiliza una transacción explícita para quitar un índice. La sys.fn_validate_plan_guide función se ejecuta para determinar si esta acción invalidará las guías de plan de la base de datos. En función de los resultados de la función, se confirma la instrucción DROP INDEX o se revierte la transacción y no se quita el índice.

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  

Consulte también

Guías de plan
sp_create_plan_guide (Transact-SQL)
sp_create_plan_guide_from_handle (Transact-SQL)