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

Erstellen von Wartungsplänen in SQL Server

Wartungspläne in SQL Server geben uns eine einfache Möglichkeit, Aufgaben zu organisieren, zu konfigurieren und zu planen, die sicherstellen, dass die Datenbank-Engine und die darin gehosteten Datenbanken in Form bleiben.

Wartungspläne bieten einem Datenbankadministrator die Möglichkeit, wichtige Aufgaben wie Indizierung, Statistikaktualisierungen, Sicherungen, Protokollbereinigungen und andere zu konfigurieren. Im vorherigen Artikel haben wir bereits besprochen, wie Sie einen grundlegenden Wartungsplan erstellen, um eine Datenbankkonsistenzprüfung durchzuführen. In diesem Artikel führen wir eine exemplarische Vorgehensweise zum Erstellen eines Wartungsplans für eine Datenbankinstanz durch, die kleine Datenbanken hostet. Im Laufe der exemplarischen Vorgehensweise werde ich die wichtigsten Entscheidungen erläutern, die in jedem Schritt im Kontext einer Instanz mit einer mäßig großen Anzahl von kleinen getroffen wurden Datenbanken. Die Idee ist, die Wartung für diese Datenbanken zu konfigurieren, ohne dies einzeln tun zu müssen. Der Fokus auf kleine Datenbanken soll den mit Wartungsvorgängen verbundenen Leistungsaufwand vermeiden.

Wartungsplan für wöchentliche Aufgaben

Abbildung 1:Wartungsplan-Assistent starten

Wir starten den Wartungsplan-Assistenten über Objekt-Explorer> [Instanzname]> Verwaltung> Wartungspläne (siehe Abbildung 1). Die erste Seite des Assistenten gibt uns einen Überblick über die konfigurierbaren Aufgaben. Während es andere Möglichkeiten gibt, diese Aufgaben mithilfe von Code und Auftragsplanung zu erledigen, macht es der Wartungsplan-Assistent ganz einfach, wenn Sie mit einer großen Anzahl von Datenbanken arbeiten, die auf einer Instanz gehostet werden.

Abbildung 2:Wartungsplan-Assistent

In Abbildung 3 sehen wir, wie SQL Server Felder bereitstellt, damit wir den Wartungsplan benennen und beschreiben können. Für Dokumentationszwecke ist die Eingabe einer Planbeschreibung sinnvoll. Stellen Sie sich vor, Sie übernehmen eine neue SQL Server-Instanz in einem neuen Unternehmen. Es wäre hilfreich, wenn Sie in den Objekten Beschreibungen von SQL Server-Objekten finden würden. Das sollten Sie auch für andere tun. Bitte beachten Sie, dass die Beschreibung, die ich gegeben habe, nur dazu dient, den Punkt zu veranschaulichen. Eine ausführlichere Beschreibung ist in einer Produktionsumgebung wünschenswert.

Abbildung 3:Benennen des Wartungsplans

Beachten Sie, dass wir in Abbildung 3 die Option haben, auszuwählen, ob wir einen einzelnen Zeitplan für alle Aufgaben oder einen separaten Zeitplan für jede Aufgabe verwenden möchten. Ich habe mich entschieden, getrennte Zeitpläne zu verwenden, um die Flexibilität zu haben, die Aufgaben zu staffeln. Wir möchten nicht, dass zu viele Wartungsvorgänge gleichzeitig oder hintereinander über einen langen Zeitraum ausgeführt werden, um das Risiko einer Überlastung der Serverressourcen zu vermeiden. Die Entscheidung, die Sie zu diesem Zeitpunkt treffen, kann auch von der Kapazität der Ihnen zur Verfügung stehenden Ressourcen und dem verfügbaren Wartungsfenster abhängen. Einige Leute haben genügend Kapazität und möchten die Aufgabe bei jedem Lauf schnell hinter sich bringen. In dem in diesem Artikel behandelten Szenario gehen wir davon aus, dass die betreffende Instanz am Wochenende nicht verwendet wird.

In Abbildung 4 wählen wir die Aufgaben aus, die wir ausführen möchten. Eines der großartigen Dinge an SQL Server ist, dass jede Aufgabe am unteren Rand des Fensters beschrieben wird. Als DBA zahlt es sich aus, auch unter „Windows“ zu verstehen, was man tut. Meiner Erfahrung nach haben viele „Administratoren“ die Angewohnheit, einfach auf „WEITER, WEITER, WEITER“ zu klicken, weil sie es eilig haben, die Funktionalität zum Laufen zu bringen. Wenn Sie sich jedoch die Zeit nehmen, die Auswirkungen des nächsten „NEXT“ zu verstehen, können Sie sicherstellen, dass Sie etwas tun, das einen Mehrwert bringt und keine neuen Probleme verursacht.

Abbildung 4:Wartungsaufgaben auswählen

Die von uns ausgewählten Aufgaben werden wie folgt beschrieben:

Die Datenbankintegrität prüfen Der Task führt interne Konsistenzprüfungen der Daten- und Indexseiten innerhalb der Datenbank durch.

Der Index neu organisieren Aufgabe defragmentiert und komprimiert geclusterte und nicht geclusterte Indizes für Tabellen und Ansichten. Dadurch wird die Leistung beim Index-Scannen verbessert.

Der Index neu aufbauen Task reorganisiert Daten auf den Daten- und Indexseiten, indem Indizes neu erstellt werden. Dies verbessert die Leistung von Index-Scans und Suchvorgängen. Diese Aufgabe optimiert auch die Verteilung von Daten und freiem Speicherplatz auf den Indexseiten, was ein schnelleres zukünftiges Wachstum ermöglicht.

Die Statistiken aktualisieren Task stellt sicher, dass der Abfrageoptimierer über aktuelle Informationen zur Verteilung der Datenwerte in den Tabellen verfügt. Dadurch kann der Optimierer bessere Entscheidungen über Datenzugriffsstrategien treffen.

Die Verlaufsbereinigung Der Task löscht Verlaufsdaten zu Sicherungs- und Wiederherstellungs-, SQL Server-Agent- und Wartungsplanvorgängen. Mit diesem Assistenten können Sie den Typ und das Alter der zu löschenden Daten angeben.

Die Datenbank sichern (vollständig) Mit dieser Aufgabe können Sie die Quelldatenbanken, Zieldateien oder Bänder angeben und Optionen für eine vollständige Sicherung überschreiben.

Die Wartungsbereinigung Aufgabe entfernt Dateien, die bei der Ausführung eines Wartungsplans übrig geblieben sind.

Abbildung 5 zeigt, wo wir die Reihenfolge auswählen, in der diese Aufgaben ausgeführt werden. Dies ist aus mehreren Gründen wichtig. Beispielsweise ist es nicht sinnvoll, nach einer Indexneuerstellung eine Indexstatistikaktualisierung durchzuführen, da eine Indexneuerstellung auch eine Indexstatistikaktualisierung in SQL Server durchführt. Wir werden später in diesem Artikel sehen, wie wir dies angesichts der von uns gewählten Reihenfolge handhaben. Eine weitere mögliche Überlegung ist, dass Sie entscheiden könnten, dass es sinnvoller ist, zuerst eine Sicherung durchzuführen, bevor Sie mit bestimmten Wartungsarbeiten fortfahren.

Abbildung 5:Reihenfolge der Aufgaben

In Abbildung 6 wählen wir aus, auf welche Datenbanken wir die erste Wartungsaufgabe anwenden möchten. Dies müssen wir auch für jede der nachfolgenden Aufgaben tun. Dies ist insofern wichtig, als einige Datenbanken möglicherweise von solchen Operationen ausgenommen werden müssen. Wenn Sie beispielsweise eine Mischung aus sehr großen Datenbanken (VLDBs) und sehr kleinen Datenbanken in derselben Instanz haben (an sich schon eine schlechte Idee), müssen Sie die VLDBs möglicherweise von völlig blinden Indexneuerstellungen ausschließen. In einem solchen Fall müssen Sie die Schlüsseltabellen in dieser VLDB identifizieren und die Neuerstellungen und andere intensive Wartungsvorgänge auf Schlüsseltabellen konzentrieren. In diesem Beispiel habe ich Systemdatenbanken ausgeschlossen, da ich Wartungen für sie sorgfältig separat planen kann. Ich glaube, es ist sicherer, Systemdatenbanken separat zu handhaben, da sich Schäden an ihnen auf die gesamte Instanz auswirken können.

Abbildung 6:Bestimmen Sie den Umfang

Jeder Wartungsvorgang hat seine eigenen Optionen. Abbildung 7 zeigt die Optionen, für die wir uns bei DBCC CHECKDB entscheiden müssen. Ich bin leicht von den Standardeinstellungen abgewichen, indem ich MAXDOP auf 2 erhöht habe. In Abbildung 8 haben wir uns entschieden, diese Aufgabe Samstag- und Sonntagnacht um 1:00 Uhr morgens auszuführen.

Abbildung 7:DBCC-Optionen

Abbildung 8:DBCC-Zeitplan

Die Aufgabe „Index neu organisieren“ hat auch einen bestimmten Satz von Optionen. Erwähnenswert ist die Reihe von Bedingungen, die bestimmen, ob ein Index neu organisiert werden sollte oder nicht – 30 % Fragmentierung, mehr als 1000 Seitenzahl und zuletzt wieder höchstens 28 Tage verwendet. Dieses Fenster unterstreicht die Notwendigkeit, die von uns getroffenen Optionen zu verstehen. Um diese Optionen korrekt vorzunehmen, müssen Sie Indizes und Indexierung in einem angemessenen Umfang verstehen. Beachten Sie, dass ähnliche Entscheidungen in der Aufgabe „Index neu erstellen“ getroffen werden müssen. Beachten Sie auch, dass der empfohlene Fragmentierungsschwellenwert für die Indexreorganisation tatsächlich 15 % und nicht 30 % beträgt.

Abbildung 9:Indexoptionen neu organisieren

Die Aufgabe „Index neu erstellen“ bietet neben der Index-Reorganisation noch einige weitere Optionen. (Siehe Abbildung 10). Beachten Sie, dass ich mich entschieden habe, die Ergebnisse in TempDB zu sortieren. Damit diese Auswahl effektiv ist, ist es wichtig, TempDB entsprechend zu optimieren, da die Auswahl impliziert, dass die Sortierung für diesen Vorgang in ALLEN Datenbanken in TempDB erfolgt. Außerdem müssen wir den Zeitplan für die Indexneuerstellung einrichten. Ich habe für diese Aufgabe auch MAXDOP auf 2 gesetzt.

Abbildung 10:Index-Neuaufbau-Optionen

Wir haben bereits erwähnt, dass beim Aufrufen einer Indexneuerstellung in SQL Server standardmäßig auch die Statistikaktualisierung für Indizes aufgerufen wird. Wenn wir also die Statistikaktualisierungsaufgabe konfigurieren, entscheiden wir uns dafür, nur Spaltenstatistiken zu aktualisieren (Abbildung 11). Dieses Fenster gibt uns auch die Möglichkeit, entweder einen vollständigen Scan oder ein Sampling durchzuführen. Da es sich bei dem Kontext um kleine Datenbanken handelt, wählen wir die Option Full Scan. Auch dies erfordert ein gewisses Verständnis von Statistiken.

Abbildung 11:Statistikaktualisierungsaufgabe

Wir entscheiden uns dafür, den Bereinigungsjob so zu konfigurieren, dass alle Daten gelöscht werden, die älter als 4 Wochen sind, wie in Abbildung 12 gezeigt.

Abbildung 12:Aufgabe zur Bereinigung des Verlaufs

Der Sicherungstask bietet eine ganze Reihe von Konfigurationsoptionen in drei Registerkarten! Abbildung 13 zeigt, dass wir uns dafür entschieden haben, diese Sicherungsaufgabe auf Benutzerdatenbanken zu beschränken. Wir planen es sonntags um 3:00 Uhr morgens und gehen weiter, um das Sicherungsziel als E:\MSSQL\Backup auszuwählen (siehe Abbildung 14). Auf der dritten Registerkarte (Abbildung 15) treffen wir Entscheidungen, um die Sicherung zu überprüfen, und führen auch eine Prüfsumme durch, sodass wir näher daran sind, sicher zu sein, dass die Sicherung zuverlässig ist.

Abbildung 13:Aufgabe „Datenbank sichern“

Abbildung 14:Sicherungsziel

Abbildung 15:Sicherungsoptionen

Schließlich konfigurieren wir eine Aufgabe, die die Aufbewahrung unseres Wartungsplanprotokolls verwaltet. (Abbildung 16). Auch hier entscheiden wir uns dafür, alle Protokolldatensätze zu löschen, die älter als 4 Wochen sind. Abbildung 17 zeigt die Optionen, die wir auswählen, um sicherzustellen, dass die Aktivitäten des Wartungsplans protokolliert und per E-Mail an die Datenbankadministratorgruppe gesendet werden. Damit diese letzte Option funktioniert, müssen wir natürlich Datenbank-E-Mail konfiguriert und Operatoren richtig eingerichtet haben.

Abbildung 16:Aufgabe zur Bereinigung des Wartungsplans

Abbildung 17:Berichtsoptionen

Die Abbildungen 18 und 19 zeigen eine Zusammenfassung der von uns konfigurierten Aufgaben und Rückmeldungen zum erfolgreichen Abschluss des Assistenten.

Abbildung 18:Zusammenfassung der Optionen

Abbildung 19:Abschluss des Assistenten

Wartungsplan für tägliche Aufgaben

Wir können auch separate Wartungspläne für andere Zwecke erstellen, z. B. um einfach organisiert zu werden. Wir müssen keinen separaten Plan für tägliche Aufgaben erstellen, da wir die Zeitpläne für jede Aufgabe separat konfigurieren können. Ein Grund, warum wir möglicherweise einen separaten Plan aufstellen möchten, könnte darin bestehen, einen anderen Satz von Aufgaben auszuwählen, die auf einen anderen Satz von Datenbanken abzielen (tatsächlich können wir dies möglicherweise auch im bestehenden Plan tun).

Nehmen wir im folgenden Beispiel an, dass wir einen weiteren Satz großer Datenbanken innerhalb derselben Instanz mit unterschiedlichen Wiederherstellungspunktzielen haben. Wir müssen dann eine andere Backup-Strategie verwenden – einen täglichen differenziellen Backup-Zeitplan und einen stündlichen Transaktionsprotokoll-Backup-Zeitplan zusätzlich zu einem wöchentlichen vollständigen Backup, um ein RPO von 1 Stunde zu gewährleisten. (Siehe Abbildungen 21 und 22).

Abbildung 20:Wartungsplan für tägliche Aufgaben

Abbildung 21:Differenzielle und Tlog-Sicherungsaufgaben

Abbildung 22:Aufgabenreihenfolge des täglichen Wartungsplans

Für die differenzielle Sicherung wählen wir einen Tagesplan, der täglich um 2:00 Uhr ausgelöst wird. (Siehe Abbildung 23). Und wählen Sie die gleichen Sicherungsoptionen wie für die zuvor konfigurierte vollständige wöchentliche Sicherung.

Abbildung 23:Zeitplan für den täglichen Wartungsplan

Abbildung 24:Speicherort der differenziellen Sicherung

Abbildung 25:Differenzielle Backup-Optionen

Andererseits entscheiden wir uns dafür, die differenzielle Sicherung so zu planen, dass sie jeden Tag stündlich ausgeführt wird. Wir stellen auch sicher, dass jeder Datenbank-Backup-Satz in einem Verzeichnis mit eigenem Namen gespeichert wird. Der Rest des Assistenten ist weitgehend derselbe wie in der vorherigen exemplarischen Vorgehensweise.

Abbildung 26:Sicherungsplan für Transaktionsprotokolle

Abbildung 27:Speicherort der Transaktionsprotokollsicherung

Abbildung 28:Sicherungsoptionen für Transaktionsprotokolle

Schlussfolgerung

Nach Abschluss des Wartungsplan-Assistenten erhalten wir einen Wartungsplan und einen entsprechenden Satz von SQL Agent-Jobs (siehe Abbildung 29). Im Wesentlichen ist der Wartungsplan eine Sammlung von SSIS-Paketen, und wenn Sie die geplanten Jobs untersuchen, werden Sie feststellen, dass der Jobschritt, der in jedem Unterplanjob ausgeführt wird, ein SSIS-Paket ist (siehe Abbildung 30).

In einem nachfolgenden Beispiel zeigen wir, dass wir die Teilplanjobs jährlich ausführen können. Wir werden auch die Ergebnisse der Ausführung des Wartungsplans überprüfen und Fehler im Zusammenhang mit der Ausführung der Arbeitsschritte beheben. Wir werden auch das Wartungsplanprotokoll prüfen.

Abbildung 29:Resultierende SQL-Agent-Jobs

Abbildung 30:Jobschritt des SSIS-Pakets