Wie kann ich eine große SQL Server-Datenbank sichern, ohne die Leistung zu beeinträchtigen?

18

Es wurde berichtet, dass Abfragen langsam ausgeführt wurden oder das Zeitlimit in den frühen Morgenstunden überschritten wurde. Der einzige Job, den ich ausgeführt sehe, der sich möglicherweise darauf auswirkt, ist unser Datenbanksicherungsjob.

Die Datenbank selbst hat ungefähr 300 GB, und der Sicherungsjob beginnt um 4:30 Uhr und endet erst kurz nach 7:00 Uhr. Die aktuelle Syntax unseres Sicherungsjobs lautet:

BACKUP DATABASE [DatabaseName]
TO DISK = N'E:\Database Backups\DatabaseName.Bak'
WITH INIT, NOUNLOAD, NAME = N'DatabaseName.Bak',
NOSKIP, STATS = 10, NOFORMAT

E:\ ist eine Partition auf dem Server, die sowohl die Datenbanken als auch die Datenbanksicherungen enthält.

Es sollte auch angemerkt werden, dass dies ein virtueller Server ist, kein dedizierter Standalone-Server. Unmittelbar nach dem Umstieg auf einen virtuellen Server haben wir Beschwerden über Verzögerungen während des Sicherungsvorgangs erhalten. Ich denke, das hängt möglicherweise damit zusammen.

Gibt es eine Möglichkeit, diesen Sicherungsjob auszuführen, damit die Abfrageleistung während der Ausführung nicht beeinträchtigt wird?

Wir verwenden SQL Server 2005

Rachel
quelle

Antworten:

21
  1. Isolieren Sie die Sicherungs-E / A vom Rest der E / A auf Ihrem System. Das Sichern über das Netzwerk anstatt auf eine lokale Festplatte kann länger dauern und zu Problemen führen. Selbst in einer virtuellen Maschine sollten Sie in der Lage sein, anderen Speicher verfügbar zu machen, damit SQL Server auf ein anderes E / A-Subsystem schreiben kann.
  2. Es ist unwahrscheinlich, dass sich irgendetwas ändert, aber warum müssen Sie die STATSOption verwenden , wenn dies von einem Job ausgeführt wird ? Sind Sie sicher , dass Sie die anderen Optionen benötigen ( NOUNLOAD, NOSKIP, NOFORMAT)? Ich habe keine umfangreichen Leistungstests für die gesamte Optionsmatrix durchgeführt, aber IMHO sollten Sie nur die Optionen verwenden, von denen Sie wissen, dass Sie sie benötigen.
  3. Führen Sie Ihre vollständigen Sicherungen zu einem anderen Zeitpunkt durch, der die normalen Benutzeraktivitäten nicht beeinträchtigt. Dies ist nicht immer möglich, aber selbst im 24/7-Betrieb gibt es Spitzen- und Ruhezeiten.
  4. Wenn Sie zu 2008+ wechseln, können Sie die Sicherungskomprimierung nutzen (Enterprise in 2008, Standard oder Enterprise in 2008 R2 +). Wenn Sie nicht auf 2008 umsteigen können oder nicht über die entsprechende Edition verfügen, gibt es Backup-Tools von Drittanbietern, die die Komprimierung für Sie übernehmen, und alle sind ziemlich gut darin. Seit 2008 bin ich in der Lage, native Komprimierung zu verwenden, und bin sowohl mit der Geschwindigkeit als auch mit der Komprimierung zufrieden, da ich nicht mehr in Drittanbieter investieren muss. Aber ich erinnere mich, dass ich 2005 mit Red-Gate SQL Backup einen guten Erfolg hatte . Quest LiteSpeed ist auch ziemlich gut, aber ich habe keine Ahnung, welche Anstrengungen seit der Übernahme von Dell unternommen wurden.
  5. Wenn sich Ihre Datenbanken in einer vollständigen Wiederherstellung befinden, können Sie zwischen vollständigen Sicherungen eine längere Zeitspanne zurücklegen, da Sie wissen, dass Sie möglicherweise mehr Protokolle wiederherstellen müssen, wenn Sie zu einem bestimmten Zeitpunkt eine Wiederherstellung durchführen müssen. Sie können diese Option mit Alis Vorschlag kombinieren, unter der Woche Diffs zu erstellen. Wenn Sie sich am Donnerstag erholen müssten, müssten Sie 1 vollständigen Diff, 1 Diff und die Protokolle seit dem Diff wiederherstellen.
  6. Wenn Sie eine Menge veralteter und unveränderlicher Daten haben, können Sie diese in einer anderen Datenbank mit einem anderen Wiederherstellungsplan oder zumindest in verschiedenen Dateigruppen hosten und Ihre Sicherungsvorgänge auf diese Weise aufteilen. Wenn Sie über Referenz- oder Archivdaten verfügen, die schreibgeschützt sind, und wenn Sie sich in einer einfachen Wiederherstellung befinden, können Sie sie in eine eigene schreibgeschützte Dateigruppe verschieben, sie einmal sichern und müssen sie nicht in Ihre nächtlichen Sicherungen einbeziehen immer wieder. Siehe diese MSDN-Themen:

Piecemeal Restores durchführen

Beispiel: Teilweise Wiederherstellung nur einiger Dateigruppen (einfaches Wiederherstellungsmodell)

Aaron Bertrand
quelle
Könnten Sie mir den Weg weisen, um mehr über das Isolieren der Backup-E / A von den übrigen E / A im System zu erfahren? # 3 (Ändern der Backup-Zeit) ist keine Option, da 4:30 Uhr die beste Zeit für die Ausführung des Backups ist. Wir haben über ein Upgrade auf 2008 (# 4) gesprochen, aber ich glaube nicht, dass dies passieren wird irgendwann bald.
Rachel
Sie sind sich nicht sicher, wie Sie in die richtige Richtung weisen sollen. Können Sie der virtuellen Maschine anderen Speicherplatz zur Verfügung stellen?
Aaron Bertrand
Ja, ich denke, wir können anderen Speicher für die virtuelle Maschine verfügbar machen. Wenn Sie "Isolieren der Backup-E / A vom Rest der E / A im System" sagen, beziehen Sie sich auf das Sichern auf einem Netzwerklaufwerk anstelle eines Festplattenlaufwerks?
Rachel
3
Nein, ich meine die Sicherung auf einem anderen E / A-Subsystem als dem Datenträger, auf dem Sie gleichzeitig Lese- und Schreibvorgänge für reguläre Datenbank- und Tempdb-Aktivitäten ausführen. Dies kann ein anderes Laufwerk auf demselben Server sein, eine Freigabe auf einem anderen Computer, eine andere LUN im SAN, eine Freigabe auf einem NAS usw.
Aaron Bertrand
I Die schrittweise Wiederherstellung ist eine großartige Lösung, an die ich nicht gedacht habe. Danke, dass Sie sie veröffentlicht haben!
Ali Razeghi
8

Dies ist ein häufiges Problem, es gibt mehrere Lösungen und es hängt wirklich von Ihrer Umgebung ab. Gehen wir sie durch:

1- Backup-Komprimierung im laufenden Betrieb

2008 wurde R1 Backup Compression in Enterprise verfügbar, 2008R2 wurde es in Standard verfügbar. Das ist riesig. Es wird Ihnen viel Zeit sparen. Wenn Sie ein Upgrade durchführen können, greifen Sie zu. Wenn dies nicht möglich ist, lesen Sie das HyperBak- Dienstprogramm von RedGate oder Quest LiteSpeed . Beide haben eine kostenlose Testversion.

2- Vollständige und Diff-Backups

Ich habe eine 2-TB-Produktdatenbank geerbt, was bei einem großen Internet-Unternehmen, das ich ausgearbeitet habe, zu vielen Timeouts geführt hat. Wir haben vollständige und differenzielle Backups aktiviert, wodurch wir viel Zeit gespart haben. Ich würde eine vollständige Sicherung am Sonntag um 12:00 Uhr durchführen, wenn die Aktivität gering war, und während der Woche Differenzen durchführen. Das hat viel Platz gespart. Die Arbeit von Diff unterscheidet sich von den Transaktionsprotokollen, da sie darauf abzielen, welche Datenbankseiten geändert wurden. Alle geänderten Seiten werden gesichert. Sie führen also eine vollständige Wiederherstellung durch und anschließend die Diff-Wiederherstellung, um die geänderten Seiten hinzuzufügen.

3- Was ist Ihr Engpass?

Eine Engpassanalyse ist wichtig für die Diagnose. Sichern Sie auf demselben Festplattenarray wie Ihre Datendateien? Werden Ihre Datendateien gebunden? Was ist Ihr DISK SEC / READ und DISK SEC / WRITE für die Datenplatten während der Sicherungen? Ich habe die Backups geändert, um 4 Dateien zu erstellen. Jede Datei hat einen eigenen Thread-Writer und in unserem SAN hat das super geklappt. Testen Sie es aus, ich habe 45 Minuten durch das Erstellen von nur 4 Backup-Dateien rasiert. Stellen Sie einfach sicher, dass Ihre oben aufgeführten Festplattenkennzahlen niedrig sind. Holen Sie sich eine Grundlinie.

4- Auf einen anderen Server replizieren und sichern

Dieser ist etwas fortgeschritten. Sie müssen sicherstellen, dass Ihre replizierte Datenbank auf dem neuesten Stand ist, und Sie müssen dafür eine ordnungsgemäße Überwachung durchführen. Ist dies jedoch der Fall, können Sie nur die replizierte Datenbank sichern.

Ali Razeghi
quelle
Nur ein Köpfchen auf HyperBak, ich hatte es noch keine Vorteile für VLDBs, als ich es Ende 2011 testete. Ich sprach mit RedGate und sie erwähnten, dass es ein Fehler war, also hoffentlich ist es jetzt behoben. Ich glaube nicht, dass 300 GB sowieso als VLDB gelten, aber achten Sie darauf, wenn es nicht wie erwartet funktioniert.
Ali Razeghi
-1

Sie können diese Parameter verwenden:

BLOCKSIZE - Wählen Sie die Größe 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536. (in KB)

BUFFERCOUNT - Gibt die Gesamtzahl der E / A-Puffer an, die für den Sicherungsvorgang verwendet werden sollen. Sie können eine beliebige positive Ganzzahl angeben. Eine große Anzahl von Puffern kann jedoch aufgrund eines unzureichenden virtuellen Adressraums im Prozess "Sqlservr.exe" zu Fehlern führen. - von MSDN

MAXTRNASFERSIZE - Es ist von 65536 Bytes (64 KB) bis 4194304 Bytes (4 MB)

Filip Holub
quelle
-3

Versuch es. Es löste das Problem, dass das Zeitlimit abgelaufen ist, während die Datenbank groß war.

Private Sub Command1_Click()
On Error Resume Next
Dim con As New Connection
Dim tm As String
con.CommandTimeout = 500'''Command timeout should be 500


 With con
    .ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=dbiBMS;Data Source=192.168.103.4"
    .Open
 End With
 tm = CStr(Time)

con.Execute " backup database dbiBMS to disk='E:\Database_Backup\Test1.bak' with format "

con.Close
MsgBox tm
Exit Sub
x:
MsgBox Err.Description

End Sub
Mainul
quelle
3
Ich denke nicht, dass das Festlegen des Timeouts auf 500 ms das Problem des abgelaufenen Timeouts behebt.
Vijayp