Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Aktualisieren Sie die SQL Server-Statistiken mithilfe eines Datenbankwartungsplans

Datenbanksicherungen, Integritätsprüfungen und Leistungsoptimierungen sind regelmäßige Kernaufgaben von DBAs. Die Kundendaten sind für einen DBA sehr wichtig, um die Datenbanksicherung zu verwalten und die Integrität der Sicherungen sicherzustellen. Wenn also etwas mit einer Produktionsdatenbank schief geht, kann sie mit minimaler Ausfallzeit wiederhergestellt werden. Die Datenbankintegritätsprüfungen sind ebenfalls wichtig, da im Falle einer Datenbankbeschädigung diese mit minimaler Ausfallzeit und minimalem Datenverlust korrigiert werden kann. Die Verwaltung der Datenbankleistung ist ebenfalls wichtig. Die Verwaltung der Datenbankleistung ist eine Kombination aus mehreren Aufgaben.

  1. Identifizieren Sie die Liste der ressourcenintensiven Abfragen und helfen Sie Entwicklern, sie neu zu schreiben.
  2. Erstellen und verwalten Sie Indizes für die Tabelle. Führen Sie außerdem eine Index-Defragmentierung durch, um sicherzustellen, dass sie in gutem Zustand bleiben.
  3. Schließlich die Verwaltung von Tabellenstatistiken.

In meinem vorherigen Artikel habe ich das Thema „Statistiken automatisch erstellen“ und „Statistiken automatisch aktualisieren“ behandelt und erläutert, wie sie zur Verbesserung der Leistung beitragen können. In diesem Artikel werde ich erklären, wie der Wartungsplan erstellt und geplant wird, um die Statistiken zu aktualisieren.

Lassen Sie mich zunächst erklären, was SQL Server-Statistiken sind und wie sie helfen können, die Leistung des SQL Servers zu steigern.

SQL Server-Statistiken und ihre Bedeutung

Statistiken sind vom SQL Server-Abfrageoptimierer verwendete Metadaten, die dabei helfen, die beste Methode zum Abrufen der Daten zu ermitteln. Der Optimierer verwendet Statistiken, um die Daten, ihre Verteilung und die Anzahl der Zeilen zu verstehen, die eine bestimmte Abfrage wahrscheinlich aus den verfügbaren Statistiken zurückgibt. Basierend auf diesen Informationen entscheidet es über den optimalen Datenzugriffspfad. Es bestimmt auch, ob ein Tabellenscan oder eine Indexsuche durchgeführt werden soll, ob ein Nested-Loop-Join oder ein Hash-Join verwendet werden soll usw.

Wenn die Statistiken veraltet oder nicht verfügbar sind, wählt der Optimierer möglicherweise den schlechten Ausführungsplan, wodurch die Abfrageleistung erheblich verringert wird. SQL Server kann automatisch Statistiken führen und sie basierend auf der Verfolgung von Datenänderungen aktualisieren.

Statistiken können automatisch erstellt und aktualisiert werden, indem Sie „Statistiken automatisch erstellen“ und „Statistiken automatisch aktualisieren“ aktivieren. Bei einigen Tabellen, z. B. solchen, die erheblichen Änderungen in der Datenverteilung unterliegen, ist es jedoch möglich, dass die automatische Statistikaktualisierung von SQL Server nicht ausreicht, um eine konstant hohe Abfrageleistung aufrechtzuerhalten.

Bevor ich die verschiedenen Ansätze zum Aktualisieren der Statistiken erkläre, lassen Sie mich die verschiedenen Möglichkeiten zum Überprüfen der Statistiken erläutern, die für eine beliebige Tabelle erstellt wurden.

So überprüfen Sie die Statistiken

Wir können Spaltenstatistiken und Indexstatistiken anzeigen

  1. Mit SQL Server Management Studio.
  2. Gespeicherte Systemprozeduren und Systemkataloge und dynamische Verwaltungsansichten verwenden

Statistiken mit SQL Server Management Studio anzeigen

Ich möchte zum Beispiel die Statistiken sehen, die auf [HumanResources].[Employee] erstellt wurden in AdventureWorks2017 erstellte Tabelle Datenbank. Starten Sie dazu SQL Server Management Studio. Erweitern Sie dann AdventureWorks2017 erweitern Sie [HumanResources].[Employee] Tisch. Siehe folgendes Bild:

Gespeicherte Systemprozeduren und dynamische Verwaltungsansichten verwenden

Wenn Sie eine ältere Version von SQL Server verwenden, können Sie sp_helpstats verwenden Systemprozedur, um die Statistiken der Tabellen zu überprüfen. sp_helpstats zeigt die Statistiken, die von SQL Server oder von einem Benutzer erstellt wurden. Die von Index erstellten Statistiken werden nicht angezeigt. Um das zu demonstrieren, habe ich eine Statistik namens User_Statistics_BirthDate erstellt auf [HumanResources].[Mitarbeiter] Tabelle.

Nachfolgend das Beispiel:

USE ADVENTUREWORKS2017 
GO
EXEC SP_HELPSTATS 
  'HUMANRESOURCES.EMPLOYEE'

Es folgt die Ausgabe.

Sie können Statistiken überprüfen, indem Sie sys.stats abfragen Systemkatalog. Es bietet Informationen über die Statistiken, die von SQL Server erstellt, von Indizes erstellt und von einem Benutzer erstellt wurden.

Führen Sie die folgende Abfrage aus:

SELECT NAME         AS 'STATISTICS NAME', 
       AUTO_CREATED AS 'CREATED AUTOMATICALLY', 
       USER_CREATED AS 'CREATED BY USER' 
FROM   SYS.STATS 
WHERE  OBJECT_ID = OBJECT_ID('HUMANRESOURCES.EMPLOYEE')

Es folgt die Ausgabe:

Verbinden wir diese Tabelle nun mit anderen Systemkatalogen, um detaillierte Informationen zu den Statistiken zu erhalten. Führen Sie dazu die folgende Abfrage aus:

SELECT [SCHEMAS].[NAME] + '.' + [OBJECTS].[NAME] AS [TABLE_NAME], 
       [INDEXES].[INDEX_ID]                      AS [INDEX ID], 
       [STATS].[NAME]                            AS [STATISTIC], 
       STUFF((SELECT ', ' + [COLUMNS].[NAME] 
              FROM   [SYS].[STATS_COLUMNS] [STATS_COLUMN] 
                     JOIN [SYS].[COLUMNS] [COLUMNS] 
                       ON [COLUMNS].[COLUMN_ID] = [STATS_COLUMN].[COLUMN_ID] 
                          AND [COLUMNS].[OBJECT_ID] = [STATS_COLUMN].[OBJECT_ID] 
              WHERE  [STATS_COLUMN].[OBJECT_ID] = [STATS].[OBJECT_ID] 
                     AND [STATS_COLUMN].[STATS_ID] = [STATS].[STATS_ID] 
              ORDER  BY [STATS_COLUMN].[STATS_COLUMN_ID] 
              FOR XML PATH('')), 1, 2, '')       AS [COLUMNS_IN_STATISTIC] 
FROM   [SYS].[STATS] [STATS] 
       JOIN [SYS].[OBJECTS] AS [OBJECTS] 
         ON [STATS].[OBJECT_ID] = [OBJECTS].[OBJECT_ID] 
       JOIN [SYS].[SCHEMAS] AS [SCHEMAS] 
         ON [OBJECTS].[SCHEMA_ID] = [SCHEMAS].[SCHEMA_ID] 
       LEFT OUTER JOIN [SYS].[INDEXES] AS [INDEXES] 
                    ON [OBJECTS].[OBJECT_ID] = [INDEXES].[OBJECT_ID] 
                       AND [STATS].[NAME] = [INDEXES].[NAME] 
WHERE  [OBJECTS].[OBJECT_ID] = OBJECT_ID(N'HUMANRESOURCES.EMPLOYEE') 
ORDER  BY [STATS].[USER_CREATED] 

GO

Die obige Abfrage füllt die folgenden Details aus

  1. Die Tabelle, für die Statistiken erstellt werden.
  2. Index-ID.
  3. Name der Statistik.
  4. In Statistiken enthaltene Spalten.

Es folgt die Ausgabe:

Im nächsten Abschnitt werde ich verschiedene Möglichkeiten zur Aktualisierung der Statistiken erläutern.

Verschiedene Ansätze zur Statistikaktualisierung

Wir können die Statistiken auf folgende Weise aktualisieren:

  1. Erstellen Sie einen SQL Server-Wartungsplan.
  2. Mit dem benutzerdefinierten Skript erstellen.
  3. Führen Sie den Update-Statistikbefehl manuell für eine einzelne Tabelle aus.

Zuerst werde ich erklären, wie wir einen Wartungsplan erstellen können, um die Statistiken zu aktualisieren.

Erstellen Sie einen Wartungsplan für SQL Server, um die Statistiken zu aktualisieren

In dieser Demo erstellen wir nun einen Wartungsplan für Aktualisierungsstatistiken, um die Statistiken zu aktualisieren. Der Wartungsplan führt die folgenden Aufgaben aus:

Erstellen Sie zunächst einen Wartungsplan. Öffnen Sie dazu SQL Server Management Studio. Erweitern Sie die SQL Server-Instanz>> Verwaltungsordner>> Klicken Sie unter Verwaltung mit der rechten Maustaste auf Wartungspläne und wählen Sie Neuer Wartungsplan aus. Siehe folgendes Bild:

Der Neue Wartungsplan Dialogfeld öffnet sich. Geben Sie im Feld einen Namen für den Wartungsplan ein und klicken Sie auf OK. Siehe folgendes Bild:

Der Wartungsplan-Designer wird geöffnet. Ziehen Sie in der Wartungsplan-Designer-Toolbox „Aufgabe Statistik aktualisieren“ in das Designer-Fenster und legen Sie sie dort ab. Siehe folgendes Bild:

Doppelklicken Sie nun auf Statistiken aktualisieren . Die Aufgabe Statistiken aktualisieren Dialogfeld öffnet sich. Im Dialogfenster gibt es Optionen, mit denen der Wartungsplan angepasst werden kann. Siehe folgendes Bild:

Wir können die folgenden Optionen für die Verwendung von Statistik aktualisieren Wartungsplan anpassen.

  1. Statistiken aller Objekte einer bestimmten Datenbank aktualisieren. Siehe folgendes Bild:
  2. Spezifische Objekte ausgewählter Datenbanken. Sie können Statistiken für alle Tabellen und Ansichten / bestimmte Tabellen und Ansichten aktualisieren. Siehe folgendes Bild:

    Wenn wir Tabellen oder Ansichten auswählen, füllt SQL die Namen der Ansichten oder Tabellen in der Auswahl aus Dialogbox. Siehe folgendes Bild:
  3. Die dritte Option ist Aktualisieren . Wir können alle Statistiken von Tabellen/Ansichten aktualisieren, oder wir können auswählen, nur Spaltenstatistiken zu aktualisieren (Statistiken, die für nicht indizierte Spalten erstellt wurden), oder wir können nur Indexstatistiken (Statistiken, die von Indizes erstellt wurden) auswählen. Siehe folgendes Bild:
  4. Wir können auch den Scan-Typ jeder Statistik auswählen. Wir können Vollständiger Scan wählen oder Sample by ein bestimmter Prozentsatz oder bestimmte Zeilen. Siehe folgendes Bild:

Wie ich bereits erwähnt habe, erstellen wir nun eine Wartungsaufgabe, die die Statistiken aller Tabellen in AdventureWorks2017 aktualisiert Datenbank mit einem vollständigen Scan. Wählen Sie die Optionen also entsprechend aus. Sobald die Wartungsaufgabe konfiguriert ist, sieht sie wie folgt aus:

Sobald die Wartungsaufgabe ordnungsgemäß konfiguriert ist, schließen Sie das Dialogfeld „Statistiken aktualisieren“. Nach der Konfiguration sieht der Wartungsplan wie folgt aus:

Sobald der Wartungsplan erstellt ist, lassen Sie uns den Wartungsplan planen. Klicken Sie dazu auf das Kalendersymbol gegenüber der Beschreibung Säule. Siehe folgendes Bild:

Sobald Sie auf die Kalenderschaltfläche klicken, wird ein Dialogfeld zum Konfigurieren des Auftragszeitplans geöffnet. Siehe folgendes Bild:

Wie ich bereits erwähnt habe, wird unser Wartungsplan für Aktualisierungsstatistiken jeden Sonntag um 4:00 Uhr morgens ausgeführt. Daher werden wir den Jobplan entsprechend konfigurieren. Die Auftragsplanung ist unkompliziert. Nachdem Sie den Zeitplan konfiguriert haben, sieht das Dialogfeld wie folgt aus:

Sobald ein Ausführungszeitplan konfiguriert ist, sieht der gesamte Wartungsplan wie in der folgenden Abbildung aus. Speichern Sie den Wartungsplan und schließen Sie das Fenster.

Lassen Sie uns nun diesen Wartungsplan ausführen, indem Sie den vom Wartungsplan erstellten SQL-Job ausführen. Erweitern Sie zum Öffnen von SQL-Jobs SQL Server Agent und erweitern Sie Jobs . Sie können den vom SQL-Wartungsplan erstellten SQL-Job sehen. Um den Job auszuführen, klicken Sie jetzt mit der rechten Maustaste auf Update Statistics Weekly.Weekly.Subplan_1 und klicken Sie auf Job bei Schritt starten . Siehe folgendes Bild.

Sobald der Job abgeschlossen ist, können Sie das folgende Dialogfeld „Jobausführung erfolgreich“ sehen.

Zusammenfassung

In diesem Artikel habe ich behandelt:

  1. Eine ausführliche Erläuterung der SQL Server-Statistiken und ihrer Bedeutung.
  2. Verschiedene Optionen zum Aktualisieren der Statistiken.
  3. Ein funktionierendes Beispiel für die Erstellung eines SQL-Wartungsplans zur Aktualisierung der Statistiken.

In meinem nächsten Artikel werde ich verschiedene T-SQL-Befehle zur Aktualisierung der Statistiken erläutern. Darüber hinaus werde ich ein T-SQL-Skript erläutern, das die Statistiken basierend auf der Menge der Datenänderungen aktualisiert, die nach dem Einfügen/Aktualisieren/Löschen in der Tabelle aufgetreten sind.