Für MySQL weiß ich, dass die Datenbank in SQL-Anweisungen tabellenweise gesichert wird. Dies führt zu Sperren. Wenn Sie Spalten während der Sicherung aktualisieren, kann dies zu Integritätsproblemen führen.
Soweit ich weiß, gilt dies nicht für den Microsoft SQL Server. Wie geht der SQL Server damit um? Gibt es ein internes Einfrieren, um die Datenbank konsistent zu halten?
Außerdem habe ich gehört, dass das Sichern ein einzelner Thread ist, was bedeutet, dass nur ein Kern verwendet wird, vorausgesetzt, Sie sichern in einer einzelnen Datei. Angenommen, Sie haben eine Multicore-Maschine, z. B. 16 Kerne, oder zumindest eine deutlich größere Anzahl als eine.
Aufgrund meiner persönlichen Erfahrung hatte ich nie Probleme beim Erstellen von Backups, weder beim Sperren noch bei Overhead-Problemen, aber meine Erfahrung ist begrenzt. Aus diesem Grund empfehle ich immer, die Sicherungskomprimierung in den Servereigenschaften zu aktivieren.
Was passiert also, wenn ein Sicherungsjob ausgeführt wird? Und gibt es auch signifikante Unterschiede für die verschiedenen Versionen? Zum Beispiel 2008, 2012 und 2014 (nicht die Lizenzen).
quelle
Antworten:
Ihre gesamten Punkte werden in Backup-Mythen behandelt - von Paul Randal
30-01) Sicherungsvorgänge verursachen Blockierung
Nein. Bei Sicherungsvorgängen werden Benutzerobjekte nicht gesperrt . Sicherungen verursachen eine sehr hohe Leselast auf dem E / A-Subsystem, sodass es so aussehen kann, als ob die Arbeitslast blockiert wird, dies ist jedoch nicht der Fall. Es wird nur verlangsamt. Es gibt einen speziellen Fall, in dem eine Sicherung, die massenprotokollierte Bereiche aufnehmen muss, eine Dateisperre benötigt, die einen Prüfpunktvorgang blockieren kann - DML wird jedoch niemals blockiert.
Eine Sicherung in einer einzelnen Datei oder auf einem einzelnen Gerät verwendet einen Writer-Thread. Wenn Sie also auf Mehrere Dateien / Geräte sichern (dh auf mehrere .bak-Dateien), wird pro Datei / Gerät ein Writer-Thread erstellt.
Prüfen
quelle
Der Artikel, den Paul über Backup-Interna geschrieben hat, ist ausgezeichnet, und Sie müssen ihn lesen. Hinzufügen zu dem, was andere gesagt haben, und Hervorheben eines bestimmten Teils Ihrer Frage
Sicherungsvorgang,
can use parallelism
aber denken Sie daran, dies ist nicht die Parallelität, die von Optimizer in SQL Server gesteuert wird, sondern die Anzahl der Festplatten, von denen die Sicherung die Datendatei lesen muss und von denen die Sicherung die Datendatei und die Menge der erstellten Sicherungsdateien schreibt.Sie können den
MAXDOP
Hinweis nicht verwenden, wenn Sie eine SQL Server-Sicherung durchführenSie können in SSMS keinen Ausführungsplan für eine einfache TSQL-Sicherungsoperation generieren.
Die durch das Abfrageoptimierungsprogramm in SQL Server ausgelöste Parallelität ist im Wesentlichen für die beteiligten Operatoren bestimmt (tatsächlich ist sie komplexer, aber der Einfachheit halber können Sie dies in Kauf nehmen), da für den Sicherungsvorgang keine Operatoren erforderlich sind, da die vom Optimierungsprogramm ausgelöste Parallelität nicht verwendet werden kann.
Ich habe im Technet-Wiki einen Artikel über Sicherung und Parallelität geschrieben, in dem ich anhand einfacher Beispiele die Parallelität während der SQL Server-Sicherung erläuterte. Es folgt die Schlussfolgerung
Wenn sich Datenbankdateien auf mehreren Datenträgern befinden, wird der Sicherungsvorgang auf einem Thread pro Gerätelaufwerk zum Lesen der Daten gestartet. Wenn die Wiederherstellung auf mehreren Laufwerken / Bereitstellungspunkten durchgeführt wird, wird durch den Sicherungsvorgang ein Thread pro Laufwerk / Bereitstellungspunkt initiiert
Selbst wenn Sie mehrere Sicherungskopien auf demselben Laufwerk sichern, wird pro Sicherungsdatei ein Thread gesichert.
Die mit der Sicherung verbundene Parallelität hängt mit den Streifen zusammen. Jeder Stripe erhält einen eigenen Worker-Thread und das ist wirklich der einzige Teil der Sicherung / Wiederherstellung, den man als parallele Operationen betrachten sollte.
Der maximale Parallelitätsgrad hat keine Auswirkungen auf den Sicherungsvorgang.
Ich habe dazu eine Expertenmeinung von Paul und Bob Dorr erhalten.
Ich würde Ihnen empfehlen, diesen blog.msdn-Artikel von Bob Dorr zu lesen . Einige wichtige Punkte, die er hervorhob, sind
Wenn eine Sicherung gestartet wird, werden eine Reihe von Puffern erstellt, die aus dem Speicher außerhalb des Pufferpools zugewiesen werden. Das Ziel ist üblicherweise 4 MB für jeden Puffer, was ungefähr 4 bis 8 Puffer ergibt. Details zur Berechnung finden Sie unter: http://support.microsoft.com/kb/904804/en-us
Die Puffer werden zwischen der freien Warteschlange und der Datenwarteschlange umgeschaltet. Der Reader zieht einen freien Puffer, füllt ihn mit Daten und stellt ihn in die Datenwarteschlange. Die Schreiber ziehen gefüllte Datenpuffer aus der Datenwarteschlange, verarbeiten den Puffer und geben ihn an die freie Liste zurück.
Sie erhalten einen Writer pro Sicherungsgerät, der jeweils aus der Datenwarteschlange abruft. Ein Sicherungsbefehl mit vier (4) Datenträgerspezifikationen hat also vier Schreiber und einen Leser. Der Leser verwendet asynchrone E / A, um mit den Schreibern Schritt zu halten.
Sie können aktivieren
trace flags 3213 and 3605
, beide sind nicht dokumentiert. Verwenden Sie sie daher in der Testumgebung, und überprüfen Sie, welche interessante Meldung im SQL Server-Fehlerprotokoll ausgegeben wird. Etwas wie das Folgende würde erscheinenMir sind keine wesentlichen Änderungen im Sicherungscode für verschiedene Versionen bekannt, solche Dinge sind nicht dokumentiert. Ich kenne nur die Verbesserungen, die beim
SQL Server 2012 SP1 Cumulative Update 2,
Aktivieren der Sicherung und Wiederherstellung über den Windows Azure Blob-Speicherdienst von SQL Server mithilfe von TSQL oder SMO eingeführt wurden. Lesen Sie hierquelle
Grundsätzlich erstellt SQL Server eine fehlerhafte Kopie aller Seiten auf der Festplatte. Diese Seiten sind wahrscheinlich inkonsistent, wenn es eine gleichzeitige Aktivität gibt oder wenn es zuvor eine Aktivität ohne Checkpoint gab.
Anschließend kopiert SQL Server auch den erforderlichen Teil des Transaktionsprotokolls, der erforderlich ist, um die veralteten Seiten auf die neueste Version zu bringen und bei der Wiederherstellung für Konsistenz zu sorgen.
Ich kann nicht mit dem Multithreading des Sicherungsvorgangs sprechen. Ich gehe davon aus, dass es parallelisiert wird. Wie sonst könnten Sie eine 10-TB-Datenbank auf einem 10-GB / s-E / A-Subsystem sichern?
quelle