Síntomas
Cuando rellena una variable de tabla con muchas filas y, a continuación, la combina con otras tablas, el optimizador de consultas puede elegir un plan de consulta ineficaz, lo que puede provocar un rendimiento lento de las consultas.
Resolución
Después de aplicar esta revisión, puede activar la marca de seguimiento 2453 para permitir que una variable de tabla desencadene la recompilación cuando se cambie un número suficiente de filas. Esto puede permitir que el optimizador de consultas elija un plan más eficaz.
Este problema se corrigió por primera vez en la siguiente actualización acumulativa o Service Packs para SQL Server.
Actualización acumulativa 38 para SQL Server 2014 /en-us/help/2984923
Acerca de las actualizaciones acumulativas para SQL Server
Cada nueva actualización acumulativa para SQL Server contiene todas las revisiones y correcciones de seguridad que se incluyeron con la actualización acumulativa anterior. Consulte las actualizaciones acumulativas más recientes para SQL Server:
Service Pack 2 para SQL Server 2012
Acerca de los Service Packs para SQL Server
Los Service Packs son acumulativos. Cada Service Pack nuevo contiene todas las revisiones que se incluyen en los anteriores, además de otras nuevas. Nuestra recomendación es aplicar el Service Pack más reciente y la actualización acumulativa más recientes para ese Service Pack. No necesita instalar un Service Pack anterior antes de instalar el más reciente. Use la Tabla 1 del artículo siguiente para obtener más información sobre el Service Pack y la actualización acumulativa más recientes:
Cómo determinar la versión, la edición y el nivel de actualización de SQL Server y sus componentes
Más información
Cuando usa una variable de tabla en un lote o procedimiento, la consulta se compila y optimiza para el estado vacío inicial de variable de tabla. Si esta variable de tabla se rellena con muchas filas en tiempo de ejecución, es posible que el plan de consulta precompilado ya no sea óptimo. Por ejemplo, la consulta puede estar combinando una variable de tabla con un bucle anidado, ya que suele ser más eficaz para un número reducido de filas. Este plan de consulta puede ser ineficaz si la variable de tabla tiene millones de filas. Una combinación hash puede ser una mejor opción en tales condiciones. Para obtener un nuevo plan de consulta, es necesario volver a compilarlo. Sin embargo, a diferencia de otras tablas temporales o de usuario, el cambio en el recuento de filas en una variable de tabla no desencadena una nueva compilación de consultas. Normalmente, puede solucionar este problema con OPTION (RECOMPILAR), que tiene su propio costo de sobrecarga.
La marca de seguimiento 2453 permite la ventaja de volver a compilar consultas sin OPTION (RECOMPILAR). Este marcador de seguimiento difiere de OPTION (RECOMPILAR) en dos aspectos principales.
(1) Usa el mismo umbral de recuento de filas que otras tablas. No es necesario compilar la consulta para cada ejecución, a diferencia de OPTION (RECOMPILE). Desencadenaría la recompilación solo cuando el cambio en el recuento de filas supere el umbral predefinido.
(2) OPTION (RECOMPILE) fuerza la consulta a inspeccionar parámetros y optimizar la consulta para ellos. Esta marca de seguimiento no fuerza la búsqueda de parámetros.
Tenga en cuenta que esta marca de seguimiento debe estar activada en tiempo de ejecución. No puede usar esta marca de seguimiento con QUERYTRACEON. Esta marca de seguimiento debe usarse con precaución, ya que puede aumentar el número de recompilaciones de consultas, lo que podría costar más que los ahorros derivados de una mejor optimización de consultas.
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".