Avertissement pour les statistiques manquantes dans le plan d'exécution

24

J'ai une situation que je ne peux pas comprendre. Mon plan d'exécution SQL Server m'indique que j'ai des statistiques manquantes sur la table, mais les statistiques sont déjà créées:

avertissement

Mais si nous regardons le tableau, nous verrons qu'il existe une statistique qui a été créée automatiquement:

entrez la description de l'image ici

Quelqu'un peut-il aider à comprendre comment cela peut être?

Les statistiques Auto_Update et Auto_Create sont activées sur la base de données actuelle.

J'utilise SQL Server 2014.

Artashes Khachatryan
la source

Réponses:

15

L'avertissement ne correspond pas toujours aux statistiques manquantes sur une seule colonne .

Il n'existe aucun moyen facile de déterminer avec précision la statistique exacte que l'optimiseur a recherchée et n'a pas trouvée dans tous les cas, mais il s'agit presque toujours d'une statistique à plusieurs colonnes qui fournirait des informations de corrélation entre plusieurs prédicats d'égalité dans la requête.

Peut-être que dans votre cas, cela correspond exactement aux prédicats dans le filtre après l'analyse où l'avertissement apparaît.

Ce serait bien si SQL Server signalait toutes les colonnes pour l'avertissement de «statistique manquante», mais ce n'est pas ainsi que cela fonctionne aujourd'hui, malheureusement.

Une certaine quantité d'essais et d'erreurs peut être nécessaire pour identifier la statistique à plusieurs colonnes que vous devez créer pour supprimer l'avertissement. Notez que les statistiques multi-colonnes ne peuvent pas être créées automatiquement. Malgré l'avertissement, vous pouvez ou non trouver la qualité de l'estimation s'améliore même si la statistique manquante est fournie.

Paul White dit GoFundMonica
la source
8

Puisqu'il semble clair qu'une statistique existe déjà pour la colonne particulière, j'offre deux possibilités:

  1. L'explorateur d'objets pointe vers une autre base de données - je me méfie parce que la base de données contient DEVle nom, il est donc possible que dans un cas vous regardiez dev et dans un autre vous ne soyez pas.
  2. Le plan utilisé date d'avant la création de la statistique (soit il a été généré plus tôt, soit, moins probablement, quelque chose a empêché une recompilation d'être déclenchée lors de la création de la statistique).

Veuillez valider que la réponse simple (1) n'est pas le problème et essayez d'émettre la même requête avec OPTION (RECOMPILE)pour confirmer ou exclure (2).

Aaron Bertrand
la source
1
Aaron Bertnand, merci beaucoup pour votre réponse. Mais l'Explorateur d'objets pointe vers la base de données actuelle et l'ajout d'OPTION (RECOMPILE) ne résout pas le problème. Je veux également ajouter que ma requête exécute une procédure stockée.
Artashes Khachatryan
2

Je viens de remarquer que lorsque vous recevez de tels avertissements sur les statistiques, si vous exécutez votre requête ou procédure avec les paramètres ci-dessous:

SET SHOWPLAN_ALL ON

entrez la description de l'image ici

vous pouvez voir quelles sont les statistiques manquantes:

entrez la description de l'image ici

et en utilisant les scripts ici, vous pouvez voir quelles statistiques sont actuellement en place, et si elles manquent, vous pouvez les ajouter.

Marcello Miorelli
la source