KB4577933 - CORRECTIF : la suppression en cascade des valeurs clés en dehors des limites de l’histogramme de début de table provoque une analyse d’index en SQL Server 2017 et 2019

S’applique à
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 2019 on Windows

Symptômes

Supposons que vous disposez d’une table utilisant une contrainte de clé étrangère définie sur la suppression en cascade et que les statistiques de la colonne clé étrangère ne couvrent pas toute la plage des valeurs de clé de la table (par exemple : parce que les statistiques n’ont pas été mises à jour après les modifications apportées à la distribution de données dans la table). Dans ce scénario, lorsque vous essayez de supprimer une ligne correspondant à une valeur de clé non représentée dans l’histogramme de statistiques et que l’optimiseur de requête utilise l’estimation de cardinalité par défaut, l’opération de suppression est plus lente que prévu. Vous remarquerez peut-être également qu’une opération d’analyse d’index est utilisée pour rechercher les lignes correspondantes dans la table de référencement.

É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ésolution

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

Remarque : Ce correctif n’est activé que quand vous activez les correctifs logiciels d’optimisation (via l’option de configuration étendue de la base de données, l’indicateur de requête ou l’indicateur de trace 4199).

À 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 :

Solution de contournement

Pour contourner ce problème, appliquez l'une des méthodes suivantes :

  • Utiliser l’estimation de cardinalité héritée. Pour plus d’informations, voir Estimation de la cardinalité (SQL Server).
  • Supprimez la suppression en cascade de la définition de clé étrangère et effectuez l’opération de suppression à l’aide de la fonction JOIN entre les tables parent et enfant pour effectuer l’équivalent de la suppression en cascade.
  • Mettez à jour les statistiques de la table parente avec FULLSCAN avant de supprimer les données.

Références

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