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 Microsoft SQL Server 2012.
Síntomas
Imagine la siguiente situación:
-
Instala una instancia de Microsoft SQL Server 2008 R2 o Microsoft SQL Server 2012 en un equipo.
-
En la instancia se ejecutan instrucciones de forma simultánea similares a las siguientes:
CREATE PROC p AS RETURN (
query
); EXEC p;
O bien, ejecute una consulta que contenga el código siguiente:
IF EXISTS(
subquery
);
-
El uso de CPU es alto constantemente y los subprocesos de trabajo están en el estado ejecutable.
-
La contención de la QUERY_EXEC_STATS Spinlock es alta. Por ejemplo, el recuento circular, las posibles colisiones y los valores de reserva para el QUERY_EXEC_STATS Spinlock aumentan rápidamente.Nota Para obtener más información sobre cómo supervisar el QUERY_EXEC_STATS Spinlock, consulte la sección "más información".
En este escenario, puede producirse un bajo nivel de rendimiento.
Causa
Este problema se debe a que SQL Server 2008 R2 o SQL Server 2012 crea y destruye algunas estructuras de memoria acerca de las estadísticas globales en lugar de almacenarlos en caché. Esto provoca un cuello de botella de rendimiento.
Resolución
Información sobre la actualización acumulativa
SQL Server 2012
La corrección para este problema se publicó por primera vez en la actualización acumulativa 1 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:
2679368 Paquete de actualización acumulativa 1 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.
Paquete de actualización acumulativa 5 para SQL Server 2008 R2 SP1
La corrección para este problema se publicó por primera vez en la actualización acumulativa 5. Para obtener más información sobre cómo obtener este paquete de actualización acumulativa para SQL Server 2008 R2 SP1, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
2659694 Paquete de actualización acumulativa 5 para SQL Server 2008 R2 SP1Nota 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 SP1. 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 SP1
Más información
Para supervisar el QUERY_EXEC_STATS Spinlock, ajuste el retardo y el número de iteraciones correspondientes a su entorno en el código siguiente y, a continuación, ejecútelo:
SET NOCOUNT ONCREATE TABLE #spins([Spinlock Name] varchar(50),Collisions numeric,Spins numeric,[Spins/Collision] float,[Sleep Time (ms)] numeric,Backoffs numeric, InsertTime datetime DEFAULT GETDATE())DECLARE @counter int = 1WHILE @counter < 10 BEGIN INSERT INTO #spins ([Spinlock Name], Collisions, Spins, [Spins/Collision], [Sleep Time (ms)], Backoffs) EXECUTE ('DBCC SQLPERF (''SPINLOCKSTATS'') WITH NO_INFOMSGS') WAITFOR DELAY '00:00:05' SET @counter +=1 ENDSELECT * FROM #spins WHERE [Spinlock Name] = 'QUERY_EXEC_STATS' ORDER BY InsertTimeDROP TABLE #spins
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft recogidos en la sección "Se aplica a".