Freigeben über


Generieren eines Statistikskripts zum Erstellen einer nur statistikgeschützten Datenbank in SQL Server

In diesem Artikel erfahren Sie, wie Sie mithilfe von Datenbankmetadaten ein Statistikskript zum Erstellen einer nur statistikgeschützten Datenbank in SQL Server generieren.

Ursprüngliche Produktversion: SQL Server
Ursprüngliche KB-Nummer: 914288

Einführung

Die DBCC CLONEDATABASE ist die bevorzugte Methode, um einen nur schemageschützten Klon einer Datenbank zu generieren, um Leistungsprobleme zu untersuchen. Verwenden Sie das Verfahren in diesem Artikel nur, wenn Sie nicht verwenden DBCC CLONEDATABASEkönnen.

Der Abfrageoptimierer in Microsoft SQL Server verwendet die folgenden Informationstypen, um einen optimalen Abfrageplan zu ermitteln:

  • Datenbankmetadaten
  • Hardwareumgebung
  • Datenbanksitzungsstatus

In der Regel müssen Sie alle diese Arten von Informationen simulieren, um das Verhalten des Abfrageoptimierrs in einem Testsystem zu reproduzieren.

Microsoft Customer Support Services fordert Sie möglicherweise auf, ein Skript der Datenbankmetadaten zu generieren, um ein Abfrageoptimiererproblem zu untersuchen. In diesem Artikel werden die Schritte zum Generieren des Statistikskripts beschrieben und außerdem beschrieben, wie der Abfrageoptimierer die Informationen verwendet.

Notiz

Die in diesen Daten gespeicherten Schlüssel enthalten möglicherweise PII-Informationen. Wenn Ihre Tabelle z. B. eine Spalte "Telefonnummer " mit einer Statistik enthält, befindet sich der hohe Schlüsselwert jedes Schritts im skript für generierte Statistiken.

Skript der gesamten Datenbank

Wenn Sie eine Nur-Statistik-Klondatenbank generieren, ist es möglicherweise einfacher und zuverlässiger, die gesamte Datenbank zu skripten, anstatt einzelne Objekte zu skripten. Wenn Sie die gesamte Datenbank skripten, erhalten Sie die folgenden Vorteile:

  • Sie vermeiden Probleme mit fehlenden abhängigen Objekten, die zum Reproduzieren des Problems erforderlich sind.
  • Sie benötigen weniger Schritte, um die erforderlichen Objekte auszuwählen.

Wenn Sie ein Skript für eine Datenbank generieren und die Metadaten für die Datenbank Tausende von Objekten enthalten, verbraucht der Skriptprozess erhebliche CPU-Ressourcen. Es wird empfohlen, das Skript während der Spitzenzeiten zu generieren, oder Sie können die zweite Option Script Individual Objects verwenden, um das Skript für einzelne Objekte zu generieren.

Führen Sie die folgenden Schritte aus, um jede Datenbank zu skripten, auf die von Ihrer Abfrage verwiesen wird:

  1. Öffnen Sie das SQL Server Management Studio.

  2. Erweitern Sie in der Objekt-Explorer Datenbanken, und suchen Sie dann die Datenbank, die Sie skripten möchten.

  3. Klicken Sie mit der rechten Maustaste auf die Datenbank, zeigen Sie auf "Aufgaben", und wählen Sie dann "Skripts generieren" aus.

  4. Überprüfen Sie im Skript-Assistenten, ob die richtige Datenbank ausgewählt ist. Klicken Sie, um die gesamte Skriptdatenbank und alle Datenbankobjekte auszuwählen, und wählen Sie dann "Weiter" aus.

  5. Wählen Sie im Dialogfeld "Skriptoptionen auswählen" die Schaltfläche "Erweitert " aus, um die folgenden Einstellungen vom Standardwert in den Wert zu ändern, der in der folgenden Tabelle aufgeführt ist.

    Skriptoption Auszuwählende Wert
    Ansi-Abstand Richtig
    Skripterstellung beim Fehler fortsetzen Richtig
    Skript für abhängige Objekte generieren Richtig
    Systemeinschränkungsnamen einschließen Richtig
    Skriptsortierung Richtig
    Skripterstellung für Anmeldungen Richtig
    Berechtigungen auf Skriptobjektebene Richtig
    Skripterstellung für Statistiken Skriptstatistiken und Histogramme
    Skripterstellung für Indizes Richtig
    Skripterstellung für Trigger Richtig

    Notiz

    Beachten Sie, dass die Option "Skriptanmeldungen " und die Option "Berechtigungen auf Skriptobjektebene" möglicherweise nicht erforderlich sind, es sei denn, das Schema enthält Objekte, die anderen Anmeldeinformationen als dbo besitzen.

  6. Wählen Sie "OK" aus, um die Änderungen zu speichern, und schließen Sie die Seite "Erweiterte Skriptoptionen".

  7. Wählen Sie " In Datei speichern" und dann die Option "Einzelne Datei " aus.

  8. Überprüfen Sie Ihre Auswahl, und wählen Sie "Weiter" aus.

  9. Wählen Sie Fertig stellenaus.

Skript einzelne Objekte

Sie können nur die einzelnen Objekte skripten, auf die von einer bestimmten Abfrage verwiesen wird, anstatt die vollständige Datenbank zu skripten. Wenn jedoch nicht alle Datenbankobjekte mithilfe der WITH SCHEMABINDING Klausel erstellt wurden, sind die Abhängigkeitsinformationen in der sys.depends Systemtabelle möglicherweise nicht immer korrekt. Diese Ungenauigkeit kann zu einem der folgenden Probleme führen:

  • Der Skriptingprozess skriptt kein abhängiges Objekt.

  • Der Skriptprozess kann Skriptobjekte in der falschen Reihenfolge skripten. Um das Skript erfolgreich auszuführen, müssen Sie das generierte Skript manuell bearbeiten.

Daher wird davon abgeraten, einzelne Objekte zu skripten, es sei denn, die Datenbank verfügt über viele Objekte und Skripts würden andernfalls zu lange dauern. Wenn Sie skripts einzelne Objekte verwenden müssen, führen Sie die folgenden Schritte aus:

  1. Erweitern Sie im SQL Server Management Studio Datenbanken, und suchen Sie dann die Datenbank, die Sie skripten möchten.

  2. Klicken Sie mit der rechten Maustaste auf die Datenbank, zeigen Sie auf Script Database As, zeigen Sie dann auf CREATE To, und wählen Sie dann "Datei" aus.

  3. Geben Sie einen Dateinamen ein, und wählen Sie dann "Speichern" aus.

    Der Kerndatenbankcontainer wird skripted. Dieser Container enthält Dateien, Dateigruppen, die Datenbank und Eigenschaften.

  4. Klicken Sie mit der rechten Maustaste auf die Datenbank, zeigen Sie auf "Aufgaben", und wählen Sie dann "Skripts generieren" aus.

  5. Stellen Sie sicher, dass die richtige Datenbank ausgewählt ist, und wählen Sie dann "Weiter" aus.

  6. Wählen Sie im Dialogfeld "Objekttypen auswählen" die Option "Bestimmte Datenbankobjekte auswählen" aus, und wählen Sie alle Datenbankobjekttypen aus, auf die die problematischen Abfrage verweist.

    Wenn die Abfrage beispielsweise nur auf Tabellen verweist, wählen Sie "Tabellen" aus. Wenn die Abfrage auf eine Ansicht verweist, wählen Sie "Ansichten" und "Tabellen" aus. Wenn die problematische Abfrage eine benutzerdefinierte Funktion verwendet, wählen Sie "Funktionen" aus.

  7. Wenn Sie alle Objekttypen ausgewählt haben, auf die von der Abfrage verwiesen wird, wählen Sie "Weiter" aus.

  8. Wählen Sie im Dialogfeld "Skriptoptionen festlegen" die Schaltfläche "Erweitert " aus, und ändern Sie die folgenden Einstellungen vom Standardwert in den Wert, der in der folgenden Tabelle auf der Seite "Erweiterte Skriptoptionen " aufgeführt ist.

    Skriptoption Auszuwählende Wert
    Ansi-Abstand Richtig
    Skripterstellung beim Fehler fortsetzen Richtig
    Systemeinschränkungsnamen einschließen Richtig
    Skript für abhängige Objekte generieren Richtig
    Skriptsortierung Richtig
    Skripterstellung für Anmeldungen Richtig
    Berechtigungen auf Skriptobjektebene Richtig
    Skripterstellung für Statistiken Skriptstatistiken und Histogramme
    Skripterstellung für "USE DATABASE" Richtig
    Skripterstellung für Indizes Richtig
    Skripterstellung für Trigger Richtig

    Notiz

    Beachten Sie, dass die Berechtigungsoptionen für Skriptanmeldungen und Berechtigungen auf Skriptobjektebene möglicherweise nicht erforderlich sind, es sei denn, das Schema enthält Objekte, die anderen Anmeldeinformationen als dbo besitzen.

  9. Wählen Sie "OK" aus, um die Seite "Erweiterte Skriptoptionen " zu speichern und zu schließen.

    Für jeden Datenbankobjekttyp, den Sie in Schritt 7 ausgewählt haben, wird ein Dialogfeld angezeigt.

  10. Wählen Sie in jedem Dialogfeld die spezifischen Tabellen, Ansichten, Funktionen oder anderen Datenbankobjekte aus, und wählen Sie dann "Weiter" aus.

  11. Wählen Sie die Option "Skript für Datei " aus, und geben Sie dann denselben Dateinamen an, den Sie in Schritt 3 eingegeben haben.

  12. Wählen Sie "Fertig stellen" aus, um die Skripterstellung zu starten.

    Wenn die Skripterstellung abgeschlossen ist, senden Sie die Skriptdatei an den Microsoft-Support Engineer. Der Microsoft-Support Engineer kann auch die folgenden Informationen anfordern:

    • Hardwarekonfiguration, einschließlich der Anzahl der Prozessoren und der Menge des physischen Arbeitsspeichers.

    • SET-Optionen, die aktiv waren, als Sie die Abfrage ausgeführt haben.

    Beachten Sie, dass Sie diese Informationen möglicherweise bereits bereitgestellt haben, indem Sie einen SQLDiag-Bericht oder eine SQL Profiler-Ablaufverfolgung senden. Möglicherweise haben Sie auch eine andere Methode verwendet, um diese Informationen bereitzustellen.

Verwendung der Informationen

In den folgenden Tabellen wird erläutert, wie der Abfrageoptimierer diese Informationen zum Auswählen eines Abfrageplans verwendet.

Metadaten

Auswahlmöglichkeit Erklärung
Einschränkungen Der Abfrageoptimierer verwendet häufig Einschränkungen, um Widersprüche zwischen der Abfrage und dem zugrunde liegenden Schema zu erkennen. Wenn die Abfrage beispielsweise die WHERE col = 5 Klausel enthält und eine CHECK (col < 5) Einschränkung in der zugrunde liegenden Tabelle vorhanden ist, weiß der Abfrageoptimierer, dass keine Zeilen übereinstimmen. Der Abfrageoptimierer macht ähnliche Arten von Abzügen zur Nullbarkeit. Die Klausel ist beispielsweise je nach Nullierbarkeit der Spalte wahr oder falsch und gibt an, WHERE col IS NULL ob die Spalte aus der äußeren Tabelle einer äußeren Verknüpfung stammt. Das Vorhandensein von FREMDSCHLÜSSELeinschränkungen ist nützlich, um Kardinalität und die entsprechende Verknüpfungsreihenfolge zu bestimmen. Der Abfrageoptimierer kann Einschränkungsinformationen verwenden, um Verknüpfungen zu beseitigen oder Prädikate zu vereinfachen. Diese Änderungen können die Anforderung für den Zugriff auf die Basistabellen entfernen.
Statistik Die Statistikinformationen enthalten Dichte und ein Histogramm, das die Verteilung der führenden Spalte des Index- und Statistikschlüssels anzeigt. Je nach Art des Prädikats kann der Abfrageoptimierer dichte, das Histogramm oder beides verwenden, um die Kardinalität eines Prädikats zu schätzen. Aktuelle Statistiken sind für genaue Kardinalitätsschätzungen erforderlich. Die Kardinalitätsschätzungen werden als Eingabe verwendet, um die Kosten eines Operators zu schätzen. Daher müssen Sie über gute Kardinalitätsschätzungen verfügen, um optimale Abfragepläne zu erhalten.
Tabellengröße (Anzahl von Zeilen und Seiten) Der Abfrageoptimierer verwendet die Histogramme und die Dichte, um die Wahrscheinlichkeit zu berechnen, dass ein bestimmtes Prädikat wahr oder falsch ist. Die endgültige Kardinalitätsschätzung wird berechnet, indem die Wahrscheinlichkeit mit der Anzahl der Zeilen multipliziert wird, die der untergeordnete Operator zurückgibt. Die Anzahl der Seiten in der Tabelle oder der Index ist ein Faktor bei der Schätzung der E/A-Kosten. Die Tabellengröße wird verwendet, um die Kosten eines Scans zu berechnen, und es ist nützlich, wenn Sie die Anzahl der Seiten schätzen, auf die während einer Indexsuche zugegriffen wird.
Datenbankoptionen Mehrere Datenbankoptionen können sich auf die Optimierung auswirken. Die AUTO_CREATE_STATISTICS Optionen AUTO_UPDATE_STATISTICS wirken sich darauf aus, ob der Abfrageoptimierer neue Statistiken erstellt oder Statistiken aktualisiert, die veraltet sind. Die Parameterisierungsebene wirkt sich darauf aus, wie die Eingabeabfrage parametrisiert wird, bevor die Eingabeabfrage an den Abfrageoptimierer übergeben wird. Die Parametrisierung kann sich auf die Kardinalitätsschätzung auswirken und auch den Abgleich mit indizierten Ansichten und anderen Arten von Optimierungen verhindern. Die DATE_CORRELATION_OPTIMIZATION Einstellung bewirkt, dass der Optimierer nach Korrelationen zwischen Spalten sucht. Diese Einstellung wirkt sich auf Kardinalität und Kostenschätzung aus.

Umgebung

Auswahlmöglichkeit Erklärung
Session SET-Optionen Die ANSI_NULLS Einstellung wirkt sich auf die Auswertung des NULL = NULL Ausdrucks als "true" aus. Die Kardinalitätsschätzung für äußere Verknüpfungen kann sich je nach der aktuellen Einstellung ändern. Darüber hinaus können sich mehrdeutige Ausdrücke ebenfalls ändern. Der Ausdruck wertet z. B col = NULL . basierend auf der Einstellung anders aus. Der col IS NULL Ausdruck wertet jedoch immer auf die gleiche Weise aus.
Hardwareressourcen Die Kosten für Sortier- und Hashoperatoren hängen von der relativen Arbeitsspeichermenge ab, die für SQL Server verfügbar ist. Wenn die Größe der Daten beispielsweise größer als der Cache ist, weiß der Abfrageoptimierer, dass die Daten immer auf den Datenträger gepoolt werden müssen. Wenn die Größe der Daten jedoch wesentlich kleiner als der Cache ist, wird der Vorgang wahrscheinlich im Arbeitsspeicher ausgeführt. SQL Server berücksichtigt auch unterschiedliche Optimierungen, wenn der Server mehr als einen Prozessor hat und wenn Parallelität nicht mithilfe eines MAXDOP Hinweises oder des maximalen Grads der Parallelitätskonfiguration deaktiviert wurde.

Siehe auch