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 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.

Icono de vínculo a temasConvenciones 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 del plan tal como se informa en la vista de catálogo sys.plan_guides. plan_guide_id es int sin predeterminados.

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 AdventureWorks2008R2;
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 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 quita el índice.

USE AdventureWorks2008R2;
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