KB3195888 - CORRECTIF : une utilisation élevée du processeur entraîne des problèmes de performances en SQL Server 2016 et 2017

S’applique à
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Express - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Web - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows SQL Server 2017 on Linux

Symptômes

Lorsque vous utilisez une nouvelle instance de Microsoft SQL Server 2016 (ou 2017) ou une instance de SQL Server 2016 (ou 2017) mise à niveau à partir d’une version antérieure de SQL Server, vous rencontrez des problèmes de performances en raison de l’utilisation élevée du processeur. En outre, si vous interrogez la table sys.dm_os_spinlock_stats , vous remarquez une valeur élevée dans la colonne spins pour les lignes SECURITY_CACHE (cache de sécurité) et CMED_HASH_SET (cache de métadonnées) (par rapport aux autres lignes de la table). Par exemple, vous notez les valeurs suivantes :

Statistiques de verrouillage tournant avec des valeurs de SECURITY_CACHE et de CMED_HASH_SET élevées

Cause

Ce problème se produit en raison d’une forte contention de verrouillage tournant dans un système hautement simultané. Dans ces systèmes d’exploitation, plusieurs threads de processeur sont en concurrence pour les ressources et tournent pendant un intervalle étendu tandis qu’ils s’exécutent régulièrement dans une boucle pour déterminer si la ressource est disponible au lieu de céder immédiatement. Lorsque plusieurs threads de processeur continuent de tourner (dans une boucle while ) pour une ressource au lieu de céder, cela entraîne une utilisation élevée du processeur et des problèmes de performances.

Résolution

Ce problème a été résolu dans les mises à jour cumulatives suivantes pour SQL Server :

Remarque Une fois la mise à jour cumulative 2 de SQL Server 2016 appliquée, les noms SECURITY_CACHE et CMED_HASH_SET sont remplacés par LOCK_RW_SECURITY_CACHE et LOCK_RW_CMED_HASH_SET, respectivement. Une fois CU2 appliquée, les valeurs apparaissent comme suit.

Statistiques de verrouillage tournant après la mise à jour avec des lignes de cache de sécurité et de métadonnées renommées

À propos des mises à jour cumulatives pour SQL Server

Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels et tous les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :

Dernière mise à jour cumulative pour SQL Server 2017

Dernière mise à jour cumulative pour SQL Server 2016

État

Microsoft a confirmé qu’il s’agissait d’un problème dans les produits Microsoft répertoriés dans la section « S’applique à ».

Références

En savoir plus à propos de la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.

Le livre blanc Diagnosing and Resolving Spinlock Contention on SQL Server traite en détail des problèmes et des résolutions liés à la contention de verrouillage tournant.