Wie ein Skript die erforderlichen Datenbank-Metadaten zum Erstellen einer Statistik nur Datenbank in SQL Server

Einführung

Der Abfrageoptimierer in Microsoft SQL Server anhand optimale Abfrageplan bestimmt die folgenden Informationen:
  • Die Datenbank-Metadaten
  • Hardware-Umgebung
  • Der Sitzungszustand Datenbank
Normalerweise müssen Sie diese dieselbe Art von Informationen möchten Sie Reproduzieren des Verhaltens der Abfrageoptimierer auf einem Testsystem simulieren.

Microsoft Product Support Services können Sie ein Skript die Datenbank-Metadaten zu bitten. Microsoft Product Support Services verwendet das Skript die Datenbank-Metadaten Optimizer Problem zu untersuchen. Dieser Artikel beschreibt die Schritte, um das Statistikskript generieren. Der Artikel beschreibt außerdem, wie der Abfrageoptimierer die Informationen verwendet.

Weitere Informationen

Wenn Sie SQL Server 2005 verwenden, bevor Sie die Schritte zum Generieren des Skripts, stellen Sie sicher, dass SQL Server Management Studio Version SQL Server 2005 Service Pack 2 oder höher ist. Bei Verwendung von früheren Versionen von SQL Server Management Studio in SQL Server 2005 enthält Skript-Assistent nicht alle erforderlichen Optionen für die Schritte in diesem Artikel korrekt funktioniert.

Skript für die gesamte Datenbank

Beim Erstellen einer Statistik nur Klon kann es einfacher und zuverlässiger die gesamte Datenbank einzelne Objekte scripting Skript sein. Wenn das Skript der gesamten Datenbank erhalten Sie folgende Vorteile:
  • Vermeiden Sie Probleme mit fehlenden abhängigen Objekte, die zum Reproduzieren des Problems erforderlich sind.
  • Sie benötigen deutlich weniger Schritte notwendigen Objekte auswählen.
Hinweis Wenn Sie ein Skript für eine Datenbank generieren und die Metadaten für die Datenbank Tausende von Objekten enthält beansprucht scripting Prozess erhebliche Prozessorressourcen. Wir empfehlen, das Skript Spitzenzeiten generiert. Alternativ können Sie die zweite Option um Skript für einzelne Objekte zu generieren.

Um jede Datenbank zu erstellen, die die Abfrage verweist, gehen Sie folgendermaßen vor:
  1. Öffnen Sie SQL Server Management Studio.
  2. Im Objekt-Explorererweitern Sie Datenbanken, und suchen Sie dann die Datenbank, die Sie Skripts erstellen möchten.
  3. Mit der rechten Maustaste der Datenbank, zeigen Sie auf Aufgabenund dann auf Skripts generieren.
  4. Skript-Assistenten sicher, dass die richtige Datenbank ausgewählt ist. Aktivieren Sie das Kontrollkästchen Skript alle Objekte in der ausgewählten Datenbank , und klicken Sie dann auf Weiter.
  5. Ändern Sie im Dialogfeld Optionen auswählen Folgendes vom Standardwert auf den Wert, der in der folgenden Tabelle aufgeführt.
    SkriptoptionWert auswählen
    ANSI-LeerstellenTrue
    Fortsetzen Sie Skripts auf FehlerTrue
    Skript für abhängige Objekte generierenTrue
    System-Einschränkung NamenTrue
    Skript-SortierungTrue
    Skript-Datenbank erstellenTrue
    Skript-BenutzernamenTrue
    Skriptberechtigungen auf ObjektebeneTrue
    Skript-StatistikSkript für Statistik und Histogramme
    Skript für IndizesTrue
    Skript für TriggerTrue
    Hinweis Die Skript-Benutzernamen und das Skript Objektberechtigungen möglicherweise nicht erforderlich, wenn das Schema Objekte enthält, die Benutzernamen als Dbogehören.
  6. Klicken Sie auf Weiter.
  7. Klicken Sie auf die Option Skript in Datei , und geben Sie einen Dateinamen ein.
  8. Klicken Sie auf Fertig stellen.

Einzelne Skriptobjekte

Sie können nur einzelne Skriptobjekte, die von einer bestimmten Abfrage anstelle die gesamten Datenbank scripting verwiesen werden. Jedoch alle Datenbankobjekte mithilfe der WITH SCHEMABINDING-Klausel erstellt wurden, die Abhängigkeitsinformationen in der Systemtabelle sys.depends immer präzise möglicherweise nicht. Dieser Fehler kann folgende Probleme verursachen:
  • Scripting Prozess wird nicht im ein abhängiges Objekt Skript.
  • Scripting Prozess kann Objekte in der falschen Reihenfolge ausführen. Um das Skript erfolgreich ausgeführt, müssen Sie das generierte Skript manuell bearbeiten.
Aus diesem Grund empfohlen nicht, dass Sie einzelne Objekte Skript, wenn die Datenbank viele Objekte und scripting andernfalls zu lang wäre. Wenn Sie einzelne Skriptobjekte verwenden müssen, gehen Sie folgendermaßen vor:
  1. In SQL Server Management Studio erweitern Sie Datenbanken, und suchen Sie dann die Datenbank, die Sie Skripts erstellen möchten.
  2. Maustaste der Datenbank Datenbank Skript alszeigen, zu erstellen,zeigen und klicken Sie auf Datei.
  3. Geben Sie einen Dateinamen ein und klicken Sie dann auf Speichern.

    Der zentrale Datenbank-Container werden Skript. Dieser Container enthält Dateien, Dateigruppen, Datenbank und Eigenschaften.
  4. Mit der rechten Maustaste der Datenbank, zeigen Sie auf Aufgabenund dann auf Skripts generieren.
  5. Stellen Sie sicher, dass die richtige Datenbank ausgewählt ist, und klicken Sie auf Weiter.
  6. Ändern Sie im Dialogfeld Optionen auswählen Folgendes vom Standardwert auf den Wert, der in der folgenden Tabelle aufgeführt.
    SkriptoptionWert auswählen
    ANSI-LeerstellenTrue
    Fortsetzen Sie Skripts auf FehlerTrue
    System-Einschränkung NamenTrue
    Skript für abhängige Objekte generierenTrue
    Skript-SortierungTrue
    Skript-BenutzernamenTrue
    Skriptberechtigungen auf ObjektebeneTrue
    Skript-StatistikSkript für Statistik und Histogramme
    Skript Datenbank verwendenTrue
    Skript für IndizesTrue
    Skript für TriggerTrue
    Hinweis Die Skript-Benutzernamen und das Skript Objektberechtigungen möglicherweise nicht erforderlich, wenn das Schema Objekte enthält, die Benutzernamen als Dbogehören.
  7. Wählen Sie im Dialogfeld Objekttypen auswählen Datenbankobjekttypen, die problematische Abfrage verweist.

    Wenn die Abfrage nur Tabellen verweist, wählen Sie Tabellenein. Wenn die Abfrage eine Ansicht referenziert, wählen Sie Ansichten und Tabellen aus. Wenn die problematische Abfrage eine benutzerdefinierte Funktion verwendet, wählen Sie Funktionenaus.
  8. Wenn Sie alle Objekttypen, die die Abfrage verweist ausgewählt haben, klicken Sie auf Weiter.
  9. Dialogfeld für jeden Datenbankobjekttyp, den Sie in Schritt 7 ausgewählt. Wählen Sie in jedem Dialogfeld bestimmten Tabellen, Ansichten, Funktionen oder andere Datenbankobjekte aus und dann auf Weiter.
  10. Klicken Sie auf die Option Skript in Datei , und geben Sie den Dateinamen, den Sie in Schritt 3 eingegeben haben.
  11. Klicken Sie auf Fertig stellen , um das Skript zu starten.
Nach Abschluss des Skripts senden Sie die Skriptdatei an Microsoft-Supportmitarbeiter. Microsoft-Supportmitarbeiter können auch folgende Informationen anfordern:
  • Die Hardwarekonfiguration, einschließlich der Anzahl der Prozessoren und wie viel physischen Arbeitsspeicher vorhanden
  • Die SET-Optionen, die aktiv beim Ausführen der Abfrage waren
Hinweis Sie können bereits diese Informationen einen SQLDiag-Bericht oder eine SQL Profiler-Verfolgung. Sie können auch eine andere Methode verwendet haben diese Informationen.

Verwendung die Informationen

Die folgenden Tabellen erklären, wie der Abfrageoptimierer dazu verwendet, einen Abfrage-Plan auswählen.

Metadaten

NebenbedingungenDer Abfrageoptimierer verwendet häufig Einschränkungen Widersprüchen zwischen der Abfrage und dem zugrunde liegenden Schema erkennen. Wenn die Abfrage beispielsweise eine "WHERE Col = 5"-Klausel und eine Check-Einschränkung "Prüfen (Col < 5)" vorhanden ist, wird der Abfrageoptimierer erkennt, dass keine Zeilen übereinstimmen.

Der Abfrageoptimierer stellt ähnliche Typen von Abzügen über NULL-Zulässigkeit. Die Klausel "Spalte ist NULL" wird z. B. WAHR oder falsch, je nach der NULL-Zulässigkeit der Spalte und ob die Spalte von der äußeren Tabelle eines outer-Joins ist bezeichnet. Das Vorhandensein FOREIGN KEY Constraints kann Kardinalität und die geeignete Join-Reihenfolge bestimmt. Der Abfrageoptimierer können Einschränkungsinformationen Joins oder Prädikate vereinfachen. Diese Änderung können die Anforderung auf die Basistabellen zugreifen entfernen.
StatistikStatistiken sind Dichte und ein Histogramm mit der Verteilung der führenden Spalte des Schlüssels Index und Statistiken. Je nach Art des Prädikats können Abfrageoptimierer Dichte oder Histogramm um die Kardinalität eines Prädikats zu schätzen. Aktuelle Statistiken sind für genaue Kardinalität schätzt erforderlich. Die Kardinalität schätzt dienen als Eingabe in die Schätzung der Kosten eines Operators. Daher benötigen Sie gute Kardinalität schätzt optimale Abfragepläne erhalten.
Größe (Anzahl der Zeilen und Seiten)Der Abfrageoptimierer verwendet Histogramme und Dichte, mit die Wahrscheinlichkeit, dass ein angegebenes Prädikat true oder false ist. Die endgültige Kardinalität Schätzung wird berechnet durch Multiplikation der Wahrscheinlichkeit mit untergeordneten Operator zurückgegebene Zeilenanzahl. Die Anzahl der Seiten in der Tabelle oder der Index ist ein Faktor für die e/a-Kosten schätzen. Die Tabellengröße wird zur Berechnung der Kosten für einen Scan, und ist nützlich, wenn die Anzahl der Seiten zu schätzen, die eine Indexsuche zugegriffen wird.
DatenbankoptionenMehrere Datenbankoptionen können Optimierung auswirken. Die Optionen AUTO_CREATE_STATISTICS und AUTO_UPDATE_STATISTICS beeinflussen, ob der Abfrageoptimierer erstellt neue Statistiken oder Update-Statistiken, die veraltet sind. Die PARAMETRISIERUNG Ebene wirkt sich wie die Eingabeabfrage parametrisiert wird, bevor der Abfrageoptimierer die Eingabeabfrage übergeben wird. Parametrisierung kann Kardinalität Schätzung beeinflussen und auch mit indizierten Sichten und andere Optimierungen. Die DATE_CORRELATION_OPTIMIZATION -Einstellung wird den Optimierer Korrelationen zwischen Spalten suchen. Diese Einstellung betrifft Kardinalität und kostenschätzung.

Umgebung

Sitzungsoptionen festlegenDie ANSI_NULLS -Einstellung beeinflusst, ob die "NULL = NULL" Ausdruck als True ausgewertet wird. Kardinalität Vorkalkulation für äußere Joins kann je nach der aktuellen Einstellung ändern. Mehrdeutige Ausdrücke können darüber hinaus auch ändern. Beispielsweise die "Col = NULL"-Ausdruck unterschiedlich basierend auf der Einstellung. Allerdings die "Col IS NULL" Ausdruck ergibt immer dasselbe.
Hardware-RessourcenDie Kosten für Sortierung und Hash hängt der relative Anteil des Speichers für SQL Server verfügbar ist. Beispielsweise ist die Datenmenge größer ist als der Cache der Abfrageoptimierer weiß, dass die Daten immer gespoolt müssen auf der Festplatte. Ist die Größe der Daten viel kleiner als der Cache ist der Vorgang wahrscheinlich im Speicher ausgeführt werden. SQL Server hält auch andere Optimierungen der Server mehrere Prozessoren und Parallelität "MAXDOP" Hinweis oder die Konfigurationsoption Max. Grad an Parallelität nicht deaktiviert wurde.
Eigenschaften

Artikelnummer: 914288 – Letzte Überarbeitung: 16.01.2017 – Revision: 1

Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Standard, Microsoft SQL Server 2014 Web, Microsoft SQL Server 2014 Web, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Web, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 R2 Web, Microsoft SQL Server 2008 R2 Workgroup, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Web, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Enterprise X64 Edition, Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Standard X64 Edition, Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems

Feedback