REVISIÓN: Un rendimiento deficiente al utilizar variables de tabla en SQL Server 2012 o 2014 de SQL Server

Síntomas

Al rellenar una variable de tabla con muchas filas y únase con otras tablas, el optimizador de consultas puede elegir un plan de consulta poco eficiente, que puede conducir a disminuir el rendimiento de la consulta.

Solución

Después de aplicar este hotfix, puede activar el indicador de traza 2453 para permitir que una variable de tabla desencadenar recompile cuando cambia suficiente número de filas. Esto puede permitir que el optimizador de consultas elija un plan más eficaz.

El problema se solucionó primero en la siguiente actualización acumulativa o / y Service Packs de SQL Server.

Actualización acumulativa 3 para SQL Server de 2014

Acerca de las actualizaciones acumulativas de SQL Server

Service pack 2 para SQL Server 2012

Acerca de los Service packs de SQL Server

Más información

Cuando se utiliza una variable de tabla en un lote o procedimiento, la consulta se compila y optimizada para el estado inicial vacío de variable de tabla. Si esta variable de tabla se rellena con muchas filas en tiempo de ejecución, puede que el plan de consulta compilado previamente ya no sean óptimo. Por ejemplo, la consulta puede a unirse a una variable de tabla con bucle anidado ya que normalmente es más eficaz para un número reducido de filas. Este plan de consulta puede ser ineficaz si la variable de tabla con millones de filas. Una combinación hash puede ser una mejor elección en dicha condición. Para obtener un nuevo plan de consulta, debe volver a compilar. A diferencia de otros usuarios o tablas temporales, sin embargo, cambio de número de fila en una variable de tabla no desencadenar una recompilación de consultas. Normalmente, puede evitar esto con OPTION (RECOMPILE), que tiene su propio coste general.
El indicador de traza 2453 permite el beneficio de consulta recompile sin OPTION (RECOMPILE). Este indicador de traza difiere de OPTION (RECOMPILE) en dos aspectos fundamentales.
(1) utiliza el mismo umbral de número de fila que otras tablas. La consulta no necesita ser compilado para cada ejecución, a diferencia de OPTION (RECOMPILE). Recompile desencadenaría sólo cuando el cambio de número de fila supera el umbral predefinido.
(2) la opción (RECOMPILE) obliga a la consulta para inspeccionar los parámetros y optimizar la consulta para ellos. Este indicador de traza no obliga a leerlo de parámetro.

Nota este indicador de traza debe estar activada en tiempo de ejecución. No puede utilizar este indicador de traza con QUERYTRACEON. Este indicador de traza debe utilizarse con precaución ya que puede aumentar el número de recompilaciones de consultas que podría costar más de ahorro de optimizar mejor la consulta.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".
Propiedades

Id. de artículo: 2952444 - Última revisión: 22 ene. 2017 - Revisión: 1

Microsoft SQL Server 2012 Service Pack 2, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Standard

Comentarios