sys.fn_validate_plan_guide (Transact-SQL)
Comprueba la validez de la guía de plan especificada. La función sys.fn_validate_plan_guide devuelve el primer mensaje de error encontrado cuando la guía de plan se aplica 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 elimina 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 eliminar 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.
Sintaxis
sys.fn_validate_plan_guide ( plan_guide_id )
Argumentos
- plan_guide_id
Es el Id. de la guía de plan indicado en la vista de catálogo de sys.plan_guides. plan_guide_id es de tipo int, sin valor predeterminado.
Tabla devuelta
Nombre de 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 de 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.
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 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. 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 eliminar un índice. La función sys.fn_validate_plan_guide se ejecuta para determinar si esta acción invalidará cualquier guía de plan en 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 elimina el índice.
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
Vea también