Symptômes
Dans Microsoft SQL Server 2016 ou SQL Server 2017 sur Windows, vous pouvez rencontrer une baisse des performances dans les conditions suivantes :
-
Lorsque vous exécutez plusieurs opérations INSERTSELECT simultanées dans des tables temporaires.
-
Lorsque vous interrogez sys.dm_os_waiting_tasks. Dans ce cas, la colonne resource_description affiche les attentes sur les pages PFS (Espace libre de page) pour plusieurs demandes.
Cause
Le parallélisme INSERT pour les opérations INSERTSELECT a été introduit dans SQL Server 2016 ou SQL Server 2017 sur Windows. Les INSERT dans les tables temporaires locales (uniquement celles identifiées par le préfixe # et non les tables temporaires globales identifiées par des préfixes ##) sont désormais automatiquement activées pour le parallélisme sans avoir à désigner l’indicateur TABLOCK requis par les tables non temporaires.
Bien que le parallélisme INSERT améliore généralement les performances des requêtes, s’il existe un nombre important d’opérations INSERTSELECT de table temporaire simultanées, la contention peut être importante sur les pages PFS. Dans certains cas, cela peut entraîner une diminution globale des performances.
Résolution
Le problème est résolu pour la première fois dans SQL Server Service Pack 1 2016. Après avoir appliqué SQL Server 2016 SP1, parallel INSERTs in INSERT.. SELECT sur les tables temporaires locales est désactivé par défaut, ce qui réduit la contention sur la page PFS et améliore les performances globales de la charge de travail simultanée. Si des INSERT parallèles à des tables temporaires locales sont souhaitées, les utilisateurs doivent utiliser l’indicateur TABLOCK lors de l’insertion dans une table temporaire locale.
Si vous avez activé l’indicateur de trace 9495 mentionné dans la section solution de contournement, il est recommandé de désactiver et de supprimer l’indicateur de trace après avoir appliqué SQL Server 2016 SP1, car l’indicateur de trace 9495 désactive l’insertion parallèle, quel que soit l’indicateur TABLOCK.
Informations sur les mises à jour cumulatives
Ce problème a été résolu dans la mise à jour cumulative suivante pour SQL Server 2016 :
À propos des mises à jour cumulatives pour SQL Server