Descripción del procedimiento para forzar planes

Puede utilizar la sugerencia de consulta USE PLAN para forzar al optimizador de consultas a utilizar un plan de consulta especificado para una consulta. La sugerencia de consulta USE PLAN funciona aceptando como argumento el plan de consulta que se desea utilizar en formato XML. Utilice USE PLAN si sabe que existen planes más adecuados para consultas cuyos planes retrasan los tiempos de ejecución. Un caso habitual es el de consultas que se ejecutaban correctamente en una versión anterior de SQL Server pero no lo hacen en una versión actualizada, ya sea una actualización de versión completa o mediante Service Pack. Aunque en una actualización la mayoría de los tiempos de ejecución normalmente tendrán un rendimiento similar o superior, puede haber excepciones. La sugerencia de consulta USE PLAN está disponible para los casos en los que se prefiere un plan de consulta seleccionado por el optimizador de consultas en una versión anterior del producto, y no el seleccionado después de la actualización.

La sugerencia de consulta USE PLAN se puede utilizar con guías de plan para solucionar problemas de mal funcionamiento de las consultas en aplicaciones implementadas. Las guías de plan se utilizan para aplicar sugerencias de consulta a las consultas cuando no se puede o no se desea cambiar la aplicación directamente. Para obtener más información acerca de las guías de plan, vea Optimizar consultas en aplicaciones implementadas mediante guías de plan. Para obtener escenarios más detallados donde se muestre cómo aplicar la sugerencia de consulta USE PLAN en guías de plan, vea Escenario para forzar planes: crear una guía de plan que especifica un plan de consulta y Escenario para forzar planes: crear una guía de plan para forzar un plan obtenido a partir de una consulta que se ha vuelto a escribir.

Los planes forzados se pueden utilizar para la mayoría de los tipos de consultas. Las consultas se incluyen en tablas, índices agrupados y no agrupados, vistas indizadas y tablas e índices con particiones. USE PLAN se puede especificar con las instrucciones INSERT, UPDATE, MERGE o DELETE del lenguaje de manipulación de datos (DML). Observe que los cambios en el esquema de base de datos, como agregar o quitar un índice, pueden invalidar el plan especificado en la sugerencia USE PLAN. Cuando se especifica USE PLAN directamente en una consulta, un plan no válido provoca un error en la consulta. Cuando se especifica USE PLAN en una guía de plan, un plan no válido no provocará un error en la consulta; sin embargo, el plan se compilará sin utilizar la sugerencia, y puede que esto no sea la mejor opción. Cuando se utiliza la sugerencia USE PLAN en una guía de plan, puede emplearse la función sys.fn_validate_plan_guide para comprobar la validez del plan. Basándose en los resultados de la función, es posible que se decida eliminar la guía de plan y reajustar la consulta o modificar el diseño de la base de datos. Por ejemplo, podría recrearse el índice especificado en la guía de plan.

Los planes de consulta generados con la sugerencia de consulta USE PLAN se almacenan en memoria caché como cualquier otro plan de consultas.

Limitaciones de los planes forzados

Cuando se fuerzan los planes, una consulta queda limitada a un único plan de ejecución estático. Asimismo, se impide que el optimizador de consultas se adapte a los distintos tamaños y distribuciones de datos, nuevos índices y otras variables. Por estos motivos, forzar los planes puede producir problemas de rendimiento si no se realiza correctamente. Se recomienda forzar los planes únicamente después de haber estudiado otras opciones para mejorar el rendimiento de la consulta, como utilizar estadísticas precisas y actualizadas e índices optimizados. Se recomienda limitar su uso y, en tal caso, dejarlo en manos de administradores de bases de datos y desarrolladores expertos que conozcan los problemas de rendimiento y el entorno cambiante de la base de datos y las aplicaciones.

Cuando se utilice la sugerencia de consulta USE PLAN para influir en la compilación de una consulta en una aplicación implementada, debería incluirse en una guía de plan en lugar de incrustarse directamente en la aplicación. Con ello, se pueden solucionar situaciones como las siguientes:

  • La sugerencia se puede cambiar o quitar sin modificar ni volver a compilar la aplicación. En casos limitados, es posible que una sugerencia USE PLAN aplicable en una versión de SQL Server no se pueda aplicar en futuros Service Pack o versiones. Por tanto, quizás tenga que cambiar o quitar la sugerencia USE PLAN después de implementar la aplicación.

  • Se puede evitar el uso de una sugerencia grande directamente en la consulta. De esta forma, la lectura de la consulta es más fácil.

    Nota importanteImportante

    Al crear una guía de plan con USE PLAN, durante la fase de comprobación se debería comprobar si la consulta cuyo plan se desea forzar suele enviarse con una solicitud de cursor. Los planes de consulta de las consultas basadas en cursor son diferentes de los de las consultas sin cursores. Por tanto, para crear una guía de plan que especifique una sugerencia USE PLAN aplicable a una consulta enviada con una solicitud de cursor, la guía de plan debe especificar un plan de cursor. Para obtener más información, vea Usar la sugerencia de consulta USE PLAN en consultas con cursores.

No se pueden forzar planes para los siguientes tipos de consultas: