KB3180087 - Performances médiocres lors de l’exécution de INSERT.. Opérations SELECT dans SQL Server 2016 ou SQL Server 2017 sur Windows

S’applique à
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use)

Symptômes

Dans Microsoft SQL Server 2016 ou SQL Server 2017 sur Windows, vous pouvez rencontrer une diminution 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 Espace libre 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 les préfixes ##) sont maintenant 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 de requête, s’il existe un nombre important d’opérations INSERTSELECT de table temporaire simultanées, les conflits peuvent être importants pour les pages PFS. Dans certains cas, cela peut entraîner une diminution globale des performances.

Résolution

Ce problème est résolu dans SQL Server 2016 Service Pack 1. Après avoir appliqué SQL Server 2016 SP1, INSERTs en parallèle dans INSERT. La fonction SELECT to local temporary tables est désactivée par défaut, ce qui réduit les conflits sur la page PFS et améliore les performances globales pour les charges de travail simultanées. Si des INSERTs parallèles à des tables temporaires locales sont souhaités, les utilisateurs doivent utiliser l’indicateur TABLOCK lors de l’insertion dans la table temporaire locale.

Si vous avez activé l’indicateur de trace 9495 mentionné dans la section de la 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 indépendamment de 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