Microsoft distribuye las revisiones Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) o Microsoft SQL Server 2012 en un archivo descargable. Debido a que las correcciones son acumulativas, cada versión nueva contiene todas las revisiones y todas las actualizaciones de seguridad incluidas en la versión anterior de SQL Server 2008 R2 Service Pack 1 (SP1) o de la actualización de SQL Server 2012.
Síntomas
Considere el siguiente escenario. Ejecuta una consulta en Microsoft SQL Server 2008 R2 o en Microsoft SQL Server 2012, y el optimizador de consultas genera un plan de ejecución que contiene el operador Top. En este escenario, la consulta puede tardar mucho tiempo en ejecutarse. Por ejemplo, se ejecuta una consulta que es similar a la siguiente:
SELECT TableA.Col1 FROM TableA JOIN TableB ON TableA.Col1 = TableB.Col1 WHERE TableA.Col2 = N'A' AND TableB.Col3 IN (SELECT Col1 FROM TableC )Esta consulta incluye dos combinaciones. Una combinación está comprendida entre TableB y TableC. (Esto viene implicado por la presencia del predicado IN). La otra combinación está entre la tabla A y el resultado de la primera combinación. El predicado IN devolverá True si la consulta encuentra al menos una fila que cumpla con el primer predicado de combinación. Por lo tanto, el optimizador de consultas agrega el operador superior en el plan de ejecución de la consulta. Una consulta de este tipo puede devolver solo algunas filas. Sin embargo, puede tardar más tiempo en ejecutar esta consulta de la que cabría esperar. En el plan de ejecución real de la consulta, el número estimado de filas difiere significativamente del número real de filas. Esto afecta a la capacidad del optimizador de consultas para estimar de forma precisa el costo de las diferentes opciones de plan. El problema también puede ocurrir si usa el operador superior de forma explícita o si usa uno de los siguientes operadores:
-
OPCIÓN (FAST N)
-
POR
-
EXISTE
Resolución
Información sobre la actualización acumulativa
Service Pack 2 de SQL Server 2008 R2
La corrección para este problema se publicó por primera vez en la actualización acumulativa 1 para SQL Server 2008 R2 Service Pack 2. Para obtener más información acerca de cómo obtener este paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2720425 Paquete de actualización acumulativa 1 para SQL Server 2008 R2 Service Pack 2Nota Como las compilaciones son acumulativas, cada nueva versión de corrección contiene todas las revisiones y todas las revisiones de seguridad incluidas en la versión anterior de corrección de SQL Server 2008 R2. Le recomendamos que considere la posibilidad de aplicar la versión de corrección más reciente que contenga este Hotfix. Si desea obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2730301 Las compilaciones de SQL Server 2008 R2 que se publicaron después de que se publicó SQL Server 2008 R2 Service Pack 2
Service Pack 1 de SQL Server 2008 R2
La corrección para este problema se publicó por primera vez en la actualización acumulativa 7 para SQL Server 2008 R2 Service Pack 1. Para obtener más información acerca de cómo obtener este paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2703282 Paquete de actualización acumulativa 7 para SQL Server 2008 R2 Service Pack 1Nota Como las compilaciones son acumulativas, cada nueva versión de corrección contiene todas las revisiones y todas las revisiones de seguridad incluidas en la versión anterior de corrección de SQL Server 2008 R2. Le recomendamos que considere la posibilidad de aplicar la versión de corrección más reciente que contenga este Hotfix. Si desea obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2567616 Las compilaciones de SQL Server 2008 R2 que se publicaron después de que se publicó SQL Server 2008 R2 Service Pack 1
SQL Server 2012
La corrección para este problema se publicó por primera vez en la actualización acumulativa 2 para SQL Server 2012. Para obtener más información acerca de este paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2703275 Paquete de actualización acumulativa 2 para SQL Server 2012Nota Como las compilaciones son acumulativas, cada nueva versión de corrección contiene todas las revisiones y todas las revisiones de seguridad incluidas en la versión anterior de corrección de SQL Server 2012. Microsoft recomienda que considere la posibilidad de aplicar la versión de corrección más reciente que contenga este Hotfix. Si desea obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2692828 Las compilaciones de SQL Server 2012 que se publicaron después de que se publicó SQL Server 2012 Debe aplicar una revisión de SQL Server 2012 a una instalación de SQL Server 2012.
SQL Server 2008 R2
La corrección para este problema se publicó por primera vez en la actualización acumulativa 13. Para obtener más información sobre cómo obtener este paquete de actualización acumulativa para SQL Server 2008 R2, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2679366 Paquete de actualización acumulativa 13 para SQL Server 2008 R2Nota Como las compilaciones son acumulativas, cada nueva versión de corrección contiene todas las revisiones y todas las revisiones de seguridad incluidas en la versión anterior de corrección de SQL Server 2008 R2. Le recomendamos que considere la posibilidad de aplicar la versión de corrección más reciente que contenga este Hotfix. Si desea obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
981356 Las compilaciones de SQL Server 2008 R2 que se lanzaron después de publicar SQL Server 2008 R2Nota: Después de instalar la actualización acumulativa, debe activar la marca de seguimiento 4199 para habilitar la corrección que se proporciona en esta actualización acumulativa si se cumplen las siguientes condiciones:
-
El plan de consulta tiene un operador superior encima de un operador de combinación de bucle anidado (Join 1) en el lado derecho de otro operador Apply/Union (Join 2).
-
El lado exterior de la Unión 1 tiene una referencia externa al lado exterior de la Unión 2.
-
Join 1 usa un predicado de igualdad en una columna de la izquierda que es única.
En la sección "síntomas" se muestra un ejemplo de una consulta de este tipo. (Esto supone que existen algunas restricciones de unicidad en la base de datos). Si hay otras consultas que contienen operadores TOP, OPTION (FAST N), IN o EXISTs y producen síntomas similares pero no se ajustan al patrón que se describe aquí, active la marca de seguimiento 4138.Advertencia Si habilita la marca de seguimiento 4138, el rendimiento puede disminuirse en algunas otras consultas que contienen operadores TOP, OPTION (FAST N), IN o EXISTs. La marca de seguimiento 4138 solo se debe usar cuando se cumplen las siguientes condiciones:
-
Se confirma su efecto en las consultas lentas que implican estos operadores.
-
No hay otras soluciones alternativas útiles.
-
No se detectan regresiones en otras consultas que contengan operadores similares.
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft recogidos en la sección "Se aplica a".
Solución alternativa
Para evitar este problema, use el operador de combinación externa izquierda o cualquiera de las diversas sugerencias del OPTIMIZAdor.