Was kann ich einem Server hinzufügen, um SQL-Wiederherstellungen schneller zu machen?

8

Ich habe eine 2,8-TB-SQL-Datenbank (hauptsächlich Datendateien, etwa 400 GB Protokolldateien), deren Wiederherstellung derzeit etwa 9 Stunden dauert. Diese Datenbank wird zu Testzwecken verwendet und muss zwischen jedem Lauf aus einer Sicherung gelöscht und wiederhergestellt werden, um sicherzustellen, dass wir immer am selben Punkt beginnen.

Meine Frage ist, der Server verfügt derzeit über 12 Kerne und 92 GB RAM mit einem RAID 5-Festplattensubsystem, auf dem sich die Datenbank befindet. Welche Bereiche verursachen normalerweise Engpässe bei SQL-Wiederherstellungsprozessen? Ist es die Festplatte, der Speicher oder die CPU?

Sean Long
quelle
3
Von welchem ​​Sicherungsmedium stellen Sie wieder her? Übrigens ist RAID 5 im Vergleich zu den meisten anderen RAID-Levels mit einer hohen Schreibstrafe verbunden, sodass dies möglicherweise nicht das Beste für Leistungstests ist.
Chris McKeown
Die .bak's (8 davon aufgeteilt) befinden sich auf demselben RAID 5-Array, auf dem sie wiederhergestellt werden, was mir klar macht, dass ich damit wahrscheinlich in Zukunft besser umgehen kann. Ich habe kein anderes Array, das groß genug ist, um alle .bak's aufzunehmen, aber ich kann sie möglicherweise auf verschiedene direkt angeschlossene Laufwerke aufteilen. Auch ein guter Punkt zum RAID 5. Ich bin mir dessen bewusst, aber wir führen noch keine Stresstests durch. Daher ist es in Ordnung, wenn während der eigentlichen Auslastungstests gerade ein Engpass auf dem Festplattenlaufwerk auftritt. Sobald wir etwas weiter kommen, werden wir die Festplattenleistung über SAN, RAID 0 oder RAID 1 + 0 erhöhen
Sean Long
2
Sicherlich leiden Sie übermäßig unter den Backups auf dem Laufwerk, das Sie ebenfalls wiederherstellen. Wie viele Festplatten in Ihrem aktuellen RAID5?
Mark Storey-Smith
Ich nehme an, Sie verwenden die Komprimierung. Welche anderen Sicherungsoptionen verwenden Sie? Wie sind Ihre Daten partitioniert? Können Sie Daten intelligent auf Dateigruppen verteilen (Sie können dann einfach Dateigruppensicherungen durchführen und die geänderten Daten wiederherstellen)?
Swasheck
Das Problem ist, dass die Tests einen sehr großen Prozentsatz der Datenbank berühren, sodass wir sie über mehrere Dateigruppen hinweg wiederherstellen müssen (und die Tests sich je nach den Anforderungen und der Entwicklung der Arbeitslast ändern würden). Wir müssten uns also ständig das Test-Make-up ansehen und die spezifischen Dateigruppen wiederherstellen. Das ist zwar eine Option, aber ich bin mir nicht sicher, ob es uns viel Zeit sparen würde.
Sean Long

Antworten:

6

Ihr primärer Engpass bei einer Wiederherstellung ist die Festplatten-E / A. Um dies zu beheben, benötigen Sie entweder schnellere Festplatten oder eine andere Konfiguration. Ich weiß nicht genug über RAID oder SANs, um dort etwas vorzuschlagen. Sie könnten sogar SSDs in Betracht ziehen. Sie sind unglaublich schnell. Ich möchte sie nicht für etwas verwenden, das nicht regelmäßig neu erstellt wird (tempdb ist immer ein guter Kandidat dafür), aber da Sie es häufig wiederherstellen, ist es möglicherweise in Ordnung. Andererseits möchten Sie wahrscheinlich sicherstellen, dass Ihr Testserver so nah wie möglich an Ihrem Produktionsserver ist, wenn Sie Leistungstests durchführen.

Es gibt noch ein paar andere Dinge, die Sie tun können, um sich selbst zu helfen. Komprimieren Sie zuerst Ihre Backups, falls Sie dies noch nicht getan haben. Dies setzt natürlich SQL 2008 oder höher voraus. Dies reduziert nicht nur den Speicherplatz zum Speichern des Backups, sondern auch die E / A zum Einlesen. Es fallen CPU-Kosten an. Löschen Sie auch nicht Ihre Datenbank, sondern stellen Sie sie einfach wieder her. Auf diese Weise sind die Dateien bereits vorhanden und es entsteht kein Aufwand für deren Erstellung. Sie können die sofortige Dateiinitialisierung aktivieren (dies ist eine Berechtigung auf Serverebene), um das Erstellen / Wachstum von Dateien für Ihre Datendatei erheblich zu beschleunigen, dies funktioniert jedoch nicht für Ihre Protokolldatei.

Kenneth Fisher
quelle
Gute Informationen, ich wusste nicht, dass das Wiederherstellen über das vorhandene besser ist als das Löschen / Wiederherstellen von einem Backup. Wir verwenden bereits die Komprimierung und planen zu überprüfen, ob die sofortige Dateiinitialisierung für das Konto aktiviert ist, das die Wiederherstellung durchführt. Ich schätze die Klarheit Ihrer Antwort sehr, danke!
Sean Long
Stellen Sie sicher, dass die sofortige Dateiinitialisierung auch für das Konto aktiviert ist, auf dem SQL Server ausgeführt wird. Für eine kleine Datenbank ist es wahrscheinlich keine so große Sache, aber für etwas, das Sie sich ansehen, könnte es einen großen Unterschied machen.
Kenneth Fisher
Guter Anruf. Vielen Dank auch für die Erkenntnis, dass Leistungstests nicht immer Stresstests bedeuten (und dass ich von der Art und Weise, wie meine Produktionskonfiguration derzeit eingerichtet ist, ziemlich eingeschränkt bin).
Sean Long
OT: "Betrachten Sie SSDs. ... Ich möchte sie nicht für etwas verwenden, das nicht regelmäßig neu erstellt wird." ... warum?
Martin
Ich wäre immer noch nervös, wenn sie versagen würden. Alles, was ich gelesen habe, besagt, dass sie für Datenbanken wie tempdb verwendet werden sollen, die bei jedem Start der Instanz neu erstellt werden, aber nicht für reguläre Benutzerdatenbanken. Obwohl ich mir sicher bin, dass sich das im Laufe der Zeit ändert.
Kenneth Fisher
7

Führen Sie keine Sicherung und Wiederherstellung durch. Verwenden Sie SQL Server-Snapshots. Das Speichern einer Datei mit geringer Dichte in der Größe der von Ihnen aufgenommenen Dateien erfordert viel Speicherplatz, aber das Zurücksetzen ist hunderte Male schneller.

Sie sind in den Editionen SQL Server Enterprise und SQL Server Developer verfügbar.

Mark Henderson
quelle
Das ist eine gute Idee, und wenn dies ein anderer Server als ein Leistungstestserver wäre, wäre dies ein guter Weg. Es sieht jedoch so aus, als würden DB-Snapshots nicht funktionieren, da dies zusätzlichen Overhead für die Quell-DB verursacht, den ich nicht haben kann. Bei den durchgeführten Tests handelt es sich um Leistungstests (Belastung, Belastung usw.). Daher müssen wir alles vermeiden, was extern ist und Stress verursachen würde.
Persönlich habe ich keine Leistungsunterschiede mit einem Schnappschuss bemerkt, aber ich denke, Copy-on-Write hat einen gewissen Overhead. Ich kann Ihre Arbeitsbelastung nicht beurteilen, kann ich nicht beurteilen.
Mark Henderson
2
Der Vorschlag von @SeanLong Mark ist wahrscheinlich die beste Option für Ihr Szenario. Ich denke, Sie verstehen falsch, wann und wovon Sie den Schnappschuss machen. Der Plan auf einem Testserver besteht darin, die Testdatenbank aus Ihrem Live-Backup wiederherzustellen, dann einen Snapshot der Testdatenbank zu erstellen, Ihren Testzyklus auszuführen und dann den Snapshot zurückzusetzen, zu spülen und zu wiederholen. In regelmäßigen Abständen können Sie zu Schritt 1 zurückkehren und das Live-Backup wiederherstellen, um es erneut zu testen.
Mark Storey-Smith
Ah ich sehe. Ich dachte, dass das Verwalten des Snapshots einen konstanten Overhead von der Testdatenbank erfordert, was sich auf unsere (sehr schreib- / leselastigen) Lasttests auswirken würde. Es macht mir nichts aus, wenn unsere Arbeitslast den Engpass auf dem Festplattenlaufwerk verursacht. Ich möchte nur nicht, dass ein externer Faktor (von dem ich dachte, dass er ein DB-Snapshotting ist) dies verursacht.
Sean Long