KB4040276 - CORRECTIF : Les points de contrôle indirects sur la base de données tempdb provoquent une erreur « Planificateur non productif » dans SQL Server 2016 et 2017

S’applique à
SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1 SQL Server 2017 on Windows (all editions)

Symptômes

Par défaut, les points de contrôle indirects sont activés pour la base de données tempdb dans Microsoft SQL Server 2016 et 2017. Dans des conditions de charge de travail importante, une erreur de « planificateur non productif » peut se produire et la DMV sys.dm_os_spinlock_stats affiche une contention de verrouillage tournant élevée pour le type de verrouillage tournant DP_LIST.

Résolution

Ce correctif est inclus dans les mises à jour et le Service Pack suivants :

Informations sur les Service Packs pour SQL Server 2016

Service Pack 2 pour SQL Server 2016

À propos des builds de SQL Server

Chaque nouvelle build de SQL Server contient tous les correctifs logiciels et correctifs de sécurité qui se trouvaient dans la version précédente. Nous vous recommandons d’installer les dernières mises à jour cumulatives pour SQL Server :

Dernière mise à jour cumulative pour SQL Server 2017

Dernière build pour SQL Server 2016

À propos des Service Packs pour SQL Server :

Les Service Packs sont cumulatifs. Chaque nouvelle version contient tous les correctifs fournis dans les Service Packs précédents et tous les nouveaux correctifs. Il est recommandé d’appliquer le dernier Service Pack et la dernière mise à jour cumulative pour ce Service Pack. Il n'est donc pas nécessaire d'installer la version antérieure d'un Service Pack avant d'installer la dernière version disponible. Consultez le tableau 1 de l’article suivant pour trouver plus d’informations sur le dernier Service Pack et la dernière mise à jour cumulative.

Comment déterminer la version, l’édition et le niveau de mise à jour de SQL Server et de ses composants

Solution de contournement

Pour contourner ce problème, désactivez les points de contrôle indirects sur la base de données tempdb à l’aide d’une des instructions DDL (Data Definition Language) suivantes.

Cette opération doit être effectuée de la manière suivante :

  • Sur la base de données modeldb (cela modifie également la valeur par défaut pour les nouvelles bases de données), exécutez l’instruction suivante :

    ALTER DATABASE [model] SET TARGET_RECOVERY_TIME = 0 MINUTES

  • Ou, directement sur la base de données tempdb chaque fois que l’instance démarre à l’aide de l’SQL Server Agent à l’aide de l’instruction suivante :

    ALTER DATABASE [tempdb] SET TARGET_RECOVERY_TIME = 0 MINUTES

  • Vous pouvez également émettre régulièrement des points de contrôle manuels sur la base de données tempdb en utilisant l’instruction suivante :

    use tempdb
    go checkpoint
    go
     
    De plus, TF 3468 peut être utilisé pour désactiver un point de contrôle indirect sur tempdb.

É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. Pour plus d’informations, consultez les articles suivants :