Microsoft distribue les correctifs Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) ou Microsoft SQL Server 2012 dans un fichier téléchargeable. Dans la mesure où les correctifs sont cumulatifs, chaque nouvelle version contient tous les correctifs et toutes les mises à jour de sécurité qui ont été incluses dans l’ancienne version de mise à jour de SQL Server 2008 R2 Service Pack 1 (SP1) ou Microsoft SQL Server 2012.
Symptômes
Prenons l’exemple du scénario suivant :
-
Vous installez une instance de Microsoft SQL Server 2008 R2 ou Microsoft SQL Server 2012 sur un ordinateur.
-
Les instructions concomitantes similaires à ce qui suit sont exécutées dans l’instance :
CREATE PROC p AS RETURN (
query
); EXEC p;
Vous pouvez utiliser une requête qui contient le code suivant :
IF EXISTS(
subquery
);
-
L’utilisation de l’UC est constamment élevée et les threads de bureau sont dans l’État exécutable.
-
Le contenu du SpinLock QUERY_EXEC_STATS est élevé. Par exemple, le nombre de spins, les conflits possibles et les valeurs d’arrière-plan du SpinLock de QUERY_EXEC_STATS augmentent rapidement.Remarque Pour plus d’informations sur la surveillance de l' QUERY_EXEC_STATS SpinLock, voir la section « informations supplémentaires ».
Dans ce scénario, des performances dégradées peuvent se produire.
Cause
Ce problème est dû au fait que SQL Server 2008 R2 ou SQL Server 2012 crée et détruit certaines structures mémoire relatives aux statistiques globales au lieu de les mettre en cache. Cela génère un goulet d’étranglement des performances.
Résolution
Informations sur les mises à jour cumulatives
SQL Server 2012
Le correctif de ce problème a été émis pour la première fois dans la mise à jour cumulative 1 pour SQL Server 2012. Pour plus d’informations sur ce package de mise à jour cumulative, cliquez sur le numéro ci-dessous pour consulter l’article de la base de connaissances Microsoft :
2679368 Package de mise à jour cumulative 1 pour SQL Server 2012Remarque Dans la mesure où les builds sont cumulatives, chaque nouvelle version du correctif contient tous les correctifs et les correctifs de sécurité inclus dans l’ancienne version du correctif SQL Server 2012. Microsoft vous recommande d’appliquer la version de correctif la plus récente qui contient ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2692828 Builds SQL Server 2012 publiées après la sortie de SQL Server 2012 Vous devez appliquer un correctif SQL Server 2012 à une installation de SQL Server 2012.
Package de mise à jour cumulative 5 pour SQL Server 2008 R2 SP1
Le correctif de ce problème a été émis pour la première fois dans la mise à jour cumulative 5. Pour plus d’informations sur la façon d’obtenir ce package de mise à jour cumulative pour SQL Server 2008 R2 SP1, cliquez sur le numéro ci-dessous pour consulter l’article de la base de connaissances Microsoft :
2659694 Package de mise à jour cumulative 5 pour SQL Server 2008 R2 SP1Remarque Dans la mesure où les builds sont cumulatives, chaque nouvelle version du correctif contient tous les correctifs et les correctifs de sécurité inclus dans la version précédente du correctif SQL Server 2008 R2 SP1. Nous vous recommandons d’appliquer la version de correctif la plus récente qui contient ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2567616 Builds SQL Server 2008 R2 publiées après la sortie de SQL Server 2008 R2 SP1
Informations supplémentaires
Pour surveiller le SpinLock de QUERY_EXEC_STATS , ajustez le délai et le nombre d’itérations selon votre environnement dans le code suivant, puis exécutez-le :
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
Statut
Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.