sys.fn_validate_plan_guide (Transact-SQL)
Se aplica a: SQL Server Azure 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. |
estado | 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)