Einführung
Dieser Artikel ist ein kurzer Überblick über die wichtigsten planmäßigen Wartungsarbeiten mit einer Datenbank des 24/7-Informationssystems, das keine Ausfallzeiten hat, sowie über Ansätze zu ihrer Ausführung in MS SQL Server.
Alle Kommentare und Aktualisierungen des Artikels sind sehr willkommen.
Planmäßige Wartung
Es gibt folgende geplante Wartungsarbeiten, auf die ich hinweisen möchte:
- Geplante Sicherungen mit weiterer Überprüfung ohne Wiederherstellung
- Geplante Wiederherstellung von Sicherungen zur Überprüfung ihrer Leistung
- Analyse des Datenträgers, der das System und alle notwendigen Datenbanken enthält
- Geplantes Testen erforderlicher Dienste
- Geplante Optimierung einer Systemleistung
- Geplante Wartung der Datenintegrität
- Geplante Wartung der Datenvalidierung
Die ersten drei Punkte sind die wichtigsten, da sie eine Wiederherstellung des Systems nach verschiedenen Fehlern ermöglichen. Ich würde jedoch empfehlen, die mindestens drei Punkte ebenfalls auszuführen, damit die Benutzer entspannt arbeiten können (daher sollten alle Abfragen schnell ausgeführt werden) und damit die Daten in allen Berichtssystemen validiert werden sollten.
Um die geplante Wartung zu automatisieren, ist es möglich, ihre Teile im Agent oder Windows Scheduler anzuordnen.
Der sechste Punkt basiert auf dem CHECKDB-Befehl.
Der siebte Punkt wird in Richtung des im Informationssystem verwendeten Domänenbereichs implementiert.
Ich werde im Detail auf die ersten fünf Punkte eingehen.
Geplante Sicherungen mit weiterer Überprüfung ohne Wiederherstellung
Da es viele Artikel zu diesem Thema gibt, sollte beachtet werden, dass es notwendig ist, diese geplante Wartung regelmäßig auf einem Backup-Server durchzuführen, anstatt auf dem Hauptserver. Dieser Sicherungsserver sollte aktuelle Daten enthalten (z. B. der, der bei der Replikation erhalten wurde). Außerdem müssen Sie alle Systemdatenbanken (außer tempdb) auf jeder Instanz des MS SQL Servers sichern.
Wenn die Sicherung fehlschlägt oder ein Sicherungsscan ein Problem identifiziert, müssen diese Informationen den Administratoren gemeldet werden. Beispielsweise können Sie ihnen eine E-Mail senden.
Es ist wichtig, eine Sicherungsstrategie festzulegen, die die folgenden Fragen beantwortet:
- Wie oft und wann sollten wir Daten sichern (vollständiges, differenzielles und Transaktionsprotokoll)?
- Wie lange und wann sollten wir Backups löschen?
Geplante Wiederherstellung von Sicherungen zur Überprüfung ihrer Leistung
Ich empfehle, dieses Verfahren auf einem Sicherungsserver mit Dienstprogrammen von Drittanbietern oder dem RESTORE auszuführen Befehl.
Wenn die Wiederherstellung der Sicherung fehlschlägt, müssen diese Informationen den Administratoren gemeldet werden. Beispielsweise können Sie ihnen eine E-Mail senden.
Darüber hinaus ist es notwendig, Backups von Systemdatenbanken wiederherzustellen. Dazu müssen Sie sie als gewöhnliche Benutzerdatenbank mit einem Namen wiederherstellen, der sich von den Namen der Systemdatenbanken unterscheidet.
Analyse von Datenträgern, die das System und alle erforderlichen Datenbanken enthalten
Sie müssen analysieren, wie viel Speicherplatz jede Datenbank benötigt, wie sich Dateigrößen ändern und wie sich die Größe des freien Speicherplatzes im gesamten Speichergerät ändert. Beispielsweise können Sie diese Aufgabe teilweise mit automatischer Datenerfassung über Datenbankdateien und logische Laufwerke des Betriebssystems in MS SQL Server erledigen.
Sie können diese Überprüfung jeden Tag durchführen und dann die Ergebnisse senden. Wie üblich können Sie sie an eine E-Mail senden.
Es ist auch notwendig, Systemdatenbanken zu überwachen, um sicherzustellen, dass alles richtig funktioniert.
Darüber hinaus ist es wichtig, Speichergeräte zu testen, um festzustellen, ob Wertminderungen oder fehlerhafte Sektoren vorliegen.
Beachten Sie, dass während des Testens ein Gerät außer Betrieb sein sollte und alle Daten auf ein anderes Gerät kopiert werden sollten, da das Testen das Gerät drastisch belastet.
Diese Aufgabe ist eng mit den Pflichten des Systemadministrators verbunden, daher werden wir sie beiseite lassen. Um die vollständige Kontrolle über den Fall zu übernehmen, müssen Sie die Zustellung von E-Mail-Berichten automatisieren.
Ich würde empfehlen, diesen Test zweimal im Jahr durchzuführen.
Geplantes Testen erforderlicher Dienste
Dienstausfälle sind eine schlechte Praxis. Daher tritt bei Ausfällen ein Backup-Server in Aktion. Trotzdem ist es notwendig, die Protokolle von Zeit zu Zeit zu überprüfen. Darüber hinaus können Sie sich auch eine automatische Datenerfassung mit weiterer Benachrichtigung an einen Administrator per E-Mail vorstellen.
Es ist notwendig, Aufgaben des SQL Server Agent oder Windows Scheduler mit einer automatischen Datenerfassung über abgeschlossene Aufgaben in MS SQL Server zu überprüfen.
Geplante Optimierung einer Systemleistung
Es umfasst die folgenden Aspekte:
- Automatisierung der Index-Defragmentierung in MS SQL Server-Datenbanken
- Automatisierung der Datensammlung über Änderungen von Datenbankschemata in MS SQL Server. Sie können ein Backup wiederherstellen und Änderungen vergleichen, zum Beispiel mit dbForge
- Automatische Bereinigung festgefahrener Prozesse in MS SQL Server
- Bereinigung des Prozedurcaches. Hier müssen Sie festlegen, wann und was bereinigt werden soll
- Einführung eines Leistungsindikators
- Entwicklung und Änderung von geclusterten Indizes
Außerdem empfehle ich, AUTO_CLOSE auszuschalten Funktion.
Manchmal parallelisiert ein Optimierer aus verschiedenen Gründen eine Abfrage, was nicht immer optimal ist.
Daher gibt es einige Empfehlungen, die Sie beachten sollten:
- Wenn Sie viele Daten erhalten, verlassen Sie die Parallelität.
- Wenn Sie wenige Daten erhalten, verwenden Sie keine Parallelität.
Es gibt zwei Parameter in den SQL Server-Instanzeinstellungen, die für die Parallelität verantwortlich sind:
- Maximaler Grad an Parallelität. Um die Parallelität zu deaktivieren, stellen Sie „1“ als Wert ein, was bedeutet, dass nur ein Prozessor einen Code ausführt.
- Kostenschwelle für Parallelität. Es sollte standardmäßig eingestellt sein.
Es gibt zwei Hauptwarteschlangen:
- eine Warteschlange für die CPU-Zeit (QCPU-Warteschlange). Es findet statt, wenn eine Abfrage aktiviert wurde und darauf wartet, dass ein Prozessor sie ausführt.
- eine Warteschlange für Ressourcen (QR-Warteschlange). Es findet statt, wenn eine Abfrage darauf wartet, dass die Ressourcen freigegeben werden, um den Prozess auszuführen.
Die folgende Formel beschreibt die Abfrageausführung (T):
T=TP+TQR+TCPU+TQCPU, wobei:
- TP ist Kompilierungszeit für einen Plan
- TQR ist die Wartezeit für Ressourcen (QR-Warteschlange)
- TQCPU ist die Warteschlangenzeit für zu entbindende Ressourcen (QCPU-Warteschlange)
- TCPU ist Zeit, um eine Abfrage auszuführen
In der Systemansicht sys.dm_exec_query_stats:
- total_worket_time =TP+TCPU+TQCPU
- total_elapsed_time =TQR+TCPU
Integrierte Tools erlauben keine genaue Einschätzung der Ausführungszeit von Abfragen.
In den meisten Fällen total_elapsed_time liefert Ihnen die Zeit, die der Abfrageausführungszeit nahe kommt.
Sie können die Ausführungszeit der Abfrage genauer bestimmen, indem Sie Trace verwenden. Alternativ können Sie die Start- und Endzeit der Abfrage protokollieren. Seien Sie vorsichtig mit Traces, da diese das System erheblich belasten. Daher ist es besser, es auf einem Backup-Server durchzuführen und Daten vom Hauptserver zu sammeln. In diesem Fall wird nur das Netzwerk geladen.
Beim Parallelisieren ordnet der SQL Server einer Anfrage N Prozesse zu (in der Edition Standart n<=4). Jeder Prozess benötigt CPU-Zeit, um eine Abfrage auszuführen (es muss nicht immer ein Prozess auf jedem Kern ausgeführt werden).
Je mehr Prozesse Sie haben, desto größer ist die Wahrscheinlichkeit, dass einige durch andere ersetzt werden, was zu einer Erhöhung der TQCPU führt.
In den folgenden Fällen kann die Ausführung einer Abfrage beim Parallelisieren viel länger dauern:
- Niedriger Durchsatz des Festplatten-Subsystems. In diesem Fall dauert die Abfragezerlegung viel länger.
- Daten können für den Vorgang gesperrt werden.
- Es gibt keinen Index für das Prädikat, was zu einem Tabellenscan führt.
Anmerkungen:
Sie müssen parallele Abfragen auf Servern deaktivieren, auf denen keine große Auswahl durchgeführt werden muss (total_worket_time sollte reduziert werden aufgrund einer möglichen Abnahme von TCPU und TQCPU). Dazu müssen Sie die Funktion für den maximalen Grad an Parallelität auf „1“ setzen, damit nur ein Prozessor funktioniert.
Außerdem können Sie andere Frameworks verwenden, um ein System zu erstellen, das die Hochgeschwindigkeitsleistung von Datenbanken bestimmt . Es ist wichtig zu verstehen, wie diese Frameworks funktionieren und wie abgerufene Zahlen zu interpretieren sind.
Bei der Entwicklung und Änderung von Indizes, insbesondere geclusterten Indizes, besteht der Hauptpunkt darin, zu verstehen, wie die Logik von Indizes festgelegt wird und wie sie funktioniert.
Beachten Sie, dass Primär- und Clusterschlüssel nicht dasselbe bedeuten:
Ein Primärschlüssel ist eine Spalte oder eine Reihe von Spalten, die einen Datensatz in der Tabelle eindeutig machen. Für den Primärschlüssel können Sie entweder einen eindeutigen gruppierten oder einen nicht gruppierten Index erstellen. Der Primärschlüssel wird in anderen Tabellen als Fremdschlüssel verwendet, um die Datenintegrität zu gewährleisten.
Ein geclusterter Index ein B-Baum oder seine Modifikation ist. Die Blätter enthalten Daten selbst, während die Knoten Indexinformationen enthalten. Darüber hinaus kann ein gruppierter Index auch nicht eindeutig sein. Trotzdem empfehle ich, dass es einzigartig ist.
Ich möchte daran erinnern, dass ein B-Baum eine Struktur ist, die Daten in der durch einen gruppierten Index gefilterten Reihenfolge speichert. Daher ist es wichtig, die als gruppierten Index ausgewählten Felder in absteigender oder aufsteigender Reihenfolge zu gruppieren. Für einen gruppierten Index können Sie Spalten mit Ganzzahl (Identität) sowie Daten und Zeit verwenden. Dennoch sind Spalten wie Unique Identifier nicht geeignet, da letztere zu einer regelmäßigen Umstrukturierung eines B-Baums führen, was die Anzahl der Messwerte und Aufzeichnungen auf einem Speichergerät, auf dem sich die Datenbank befindet, erhöht.
Außerdem müssen Sie sicherstellen, dass der Index mit der Systemansicht sys.dm_db_index_usage_stats verwendet wird.
P.S. Es ist notwendig, die Aktualität der Daten auf einem Backup-Server zu überprüfen, sowie ein System zu überprüfen, das diese Daten synchronisiert (z. B. Replikationen).
Lesen Sie auch:
Automatisieren der Index-Defragmentierung in MS SQL Server-Datenbanken
Automatische Datenerfassung von Datenbankschemaänderungen in MS SQL Server
Automatisches Löschen festgefahrener Prozesse im MS SQL Server
Fehlerbehebung bei lang andauernden Abfragen in MS SQL Server
Implementieren eines Leistungsindikators