Warnung vor fehlenden Statistiken im Ausführungsplan

23

Ich habe eine Situation, die ich nicht verstehen kann. Mein SQL Server-Ausführungsplan gibt an, dass Statistiken in der Tabelle fehlen, diese jedoch bereits erstellt wurden:

Warnung

Wenn wir uns jedoch die Tabelle ansehen, werden wir feststellen, dass eine Statistik automatisch erstellt wurde:

Bildbeschreibung hier eingeben

Kann jemand helfen zu verstehen, wie es sein kann?

Die Statistiken Auto_Update und Auto_Create sind für die aktuelle Datenbank aktiviert.

Ich verwende SQL Server 2014.

Artashes Khachatryan
quelle

Antworten:

15

Die Warnung entspricht nicht immer fehlenden einspaltigen Statistiken.

Es gibt keine einfache Möglichkeit, die genaue Statistik zu bestimmen, die das Optimierungsprogramm gesucht und nicht in allen Fällen gefunden hat. Es handelt sich jedoch fast immer um eine mehrspaltige Statistik , die Korrelationsinformationen über mehrere Gleichheitsvergleichselemente in der Abfrage bereitstellt.

Vielleicht entspricht es in Ihrem Fall genau den Prädikaten im Filter nach dem Scan, in dem die Warnung angezeigt wird.

Es wäre schön, wenn SQL Server alle Spalten für die Warnung "fehlende Statistik" meldete, aber leider funktioniert dies heute nicht mehr.

Möglicherweise ist eine gewisse Anzahl von Versuchen und Fehlern erforderlich, um die mehrspaltige Statistik zu identifizieren, die Sie erstellen müssen, um die Warnung zu entfernen. Beachten Sie, dass mehrspaltige Statistiken nicht automatisch erstellt werden können. Trotz der Warnung können Sie feststellen, dass sich die Qualität der Schätzung verbessert, auch wenn die fehlende Statistik angegeben wird.

Paul White sagt GoFundMonica
quelle
8

Da es offensichtlich ist, dass für die bestimmte Spalte bereits eine Statistik vorhanden ist, biete ich zwei Möglichkeiten an:

  1. Der Objekt-Explorer verweist auf eine andere Datenbank. Ich bin misstrauisch, weil die Datenbank DEVden Namen trägt. Daher ist es möglich, dass Sie in einem Fall auf dev schauen und in einem anderen nicht.
  2. Der verwendete Plan stammt aus der Zeit, bevor die Statistik erstellt wurde (entweder wurde er früher erstellt oder es war weniger wahrscheinlich, dass beim Erstellen der Statistik keine Neukompilierung ausgelöst wurde).

Vergewissern Sie sich, dass die einfache Antwort (1) nicht das Problem ist, und versuchen Sie, dieselbe Abfrage mit auszugeben, OPTION (RECOMPILE)um sie entweder zu bestätigen oder auszuschließen (2).

Aaron Bertrand
quelle
1
Aaron Bertnand, vielen Dank für Ihre Antwort. Der Objekt-Explorer zeigt jedoch auf die aktuelle Datenbank, und das Hinzufügen von OPTION (RECOMPILE) behebt das Problem nicht. Ich möchte auch hinzufügen, dass meine Abfrage eine gespeicherte Prozedur ausführt.
Artashes Khachatryan
2

Mir ist gerade aufgefallen, dass Sie solche Warnungen zu Statistiken erhalten, wenn Sie Ihre Abfrage oder Prozedur mit den folgenden Einstellungen ausführen:

SET SHOWPLAN_ALL ON

Bildbeschreibung hier eingeben

Sie können sehen, was die fehlenden Statistiken sind:

Bildbeschreibung hier eingeben

Mithilfe der Skripte können Sie sehen, welche Statistiken derzeit vorhanden sind, und sie hinzufügen, falls sie fehlen.

Marcello Miorelli
quelle