SQL Server 2K / 2K5 / 2K8 und Solid State Disks: Spezifische Optimierungen?

9

Läuft hier jemand SQL Server auf Solid-State-Laufwerken? Haben Sie spezielle Optimierungstipps gefunden? Ich bin speziell an Möglichkeiten interessiert, die Häufigkeit zu verringern, mit der SQL Server kleine zufällige Schreibvorgänge ausführt, da sie die Nemesis der SSD-Leistung sind, insbesondere MLC-SSD-Laufwerke.

Natürlich gibt es einige offensichtliche Optimierungen: Leselastige Daten sollten von der SSD bereitgestellt werden, und schreibintensive Daten sollten herkömmlichen sich drehenden Datenträgern überlassen werden. Dazu gehören natürlich auch Transaktionsprotokolle!

Bei ausreichendem Budget möchte man natürlich SLC-SSD-Festplatten wie die X25-E- oder die Vertex Ex-Serie oder verschiedene Angebote auf Unternehmensebene verwenden. Ich interessiere mich aber auch für Tipps, die MLC-SSD-Setups zugute kommen könnten. Ich denke, das ist ein interessanter Bereich. Einer der Kunden meiner Kunden hat ein kleines Budget und einen Datensatz, der immens gewachsen ist, und sie stehen vor einer vollständigen Neufassung von fast hundert Abfragen, um ein anständiges Leistungsniveau aufrechtzuerhalten. Ich habe jedoch den Verdacht, dass weniger als 500 US-Dollar RAM und SSD-Speicherplatz zu einem größeren Leistungsgewinn führen könnten als Entwicklerzeit im Wert von Tausenden (möglicherweise Zehntausenden) US-Dollar.

John Rose
quelle

Antworten:

3

Sie sind sich nicht sicher, was Sie unter der Reduzierung der Anzahl kleiner, zufälliger Schreibvorgänge verstehen, die SQL Server ausführt. SQL Server schreibt Datenseiten nur während Prüfpunkten aus. Die einzige Möglichkeit, die Anzahl der Schreibvorgänge zu begrenzen, besteht darin, das Prüfpunktintervall zu ändern oder nicht so viele IUP-Vorgänge durchzuführen. Meinten Sie etwas anderes?

In allen Implementierungen von SSDs, die ich gesehen habe (eine Handvoll), ist es genau das Gegenteil von dem, was Sie vorschlagen - die beste Verwendung von SSDs scheint für schreibintensive Transaktionsprotokolle und Tempdb zu sein - im Grunde genommen, wo ist das größte I. / O-Subsystemengpass und stecken Sie die SSDs dort ein - da Suchzeit und Latenz auf eine niedrige Konstante reduziert werden.

Testen Sie dieses von MS erstellte Forschungspapier (leider nicht sehr detailliert zu SQL Server-Besonderheiten): Migrieren des Serverspeichers auf SSDs: Analyse von Kompromissen .

Hoffe das hilft!

Paul Randal
quelle
Vielen Dank für diesen Link zum Artikel von MS. Es ist frustrierend kurz an Einzelheiten, nicht wahr? :) Leider sind kleine zufällige Schreibvorgänge in der Tat etwas, das SSDs passen lässt. Kurz gesagt, selbst für einen kleinen Schreibvorgang (dh 4 KB) muss die SSD einen ganzen Block in den Speicher lesen, ihn ändern und wieder ausschreiben. So funktioniert der Flash-Speicher der aktuellen Generation. Großartiger SSD-Übersichtsartikel: anandtech.com/storage/showdoc.aspx?i=3531&p=1
John Rose
2

Sie können die E / A-Eigenschaften von SQL Servern nicht ändern. Die Grundeinheit für den Datenträgerzugriff für Datendateien ist eine 8-KB-Seite. Es schreibt sie meistens während eines Checkpoints, schreibt sie aber auch faul, wenn es geht.
SQL wartet nicht auf den Abschluss der Schreibvorgänge auf die Datenfestplatte, bevor es zurückkehrt. Es müssen nur die Protokollschreibvorgänge abgeschlossen werden. Wenn Sie nur ein Datenbankprotokoll auf einer Festplatte speichern können, handelt es sich um sequentielle Schreibvorgänge, die auf normalen schnellen Festplatten in Ordnung sind.
Aus Sicht von SQL ist die Leistung beeinträchtigt, wenn die Festplatten gelesen werden müssen. Wenn Sie ihm mehr Speicher geben können, speichert SQL mehr Datenseiten im Speicher, was schneller ist als jede Art von Festplatte, SSD oder auf andere Weise. Natürlich können Sie auch die Anzahl der Festplattenlesevorgänge reduzieren, indem Sie geeignete Indizes erstellen. Ich gehe davon aus, dass eine SSD auch bei diesen Lesevorgängen helfen würde, da sie wahrscheinlich zufällig sind und darauf warten, dass sich die Laufwerksköpfe bewegen.
Ich weiß nicht, über welche Datenbankgröße wir hier sprechen, aber vielleicht möchten Sie sich HyperOS ansehen. Sie stellen Sata-Festplatten her, die eigentlich nur eine Ladung DDR2-RAM-Sticks sind, mit einer SSD oder einer 2,5-Zoll-Festplatte als Backup. Das Zugriffsmuster des Servers spielt dann keine Rolle. Ich würde die Protokolle jedoch nicht auf so etwas setzen. Protokolle sind das, was Ihre Daten konsistent hält. Sie müssen auf einem zuverlässigen Medium gespeichert werden. Trotz der Backup-SSD und des Akkus und des Servers mit wahrscheinlich einer USV usw. würde es mir immer noch unangenehm sein, meine Protokolle nicht auf einer echten Festplatte zu haben in einer Art fehlertolerantem RAID-Array.

pipTheGeek
quelle
1

Kleine zufällige Operationen sind aufgrund der Latenz bei der Kopfsuche die Nemesis herkömmlicher Festplatten ... SSDs können genau dies hervorragend angehen.

Bei langen, sequentiellen Vorgängen weisen Standardfestplatten eine recht gute Leistung auf, sodass die Verwendung von SSDs keinen Sinn hat (natürlich unter Leistungsgesichtspunkten).

Massimo
quelle
2
SSDs eignen sich hervorragend für zufällige Lesevorgänge, da die Suchlatenz nahe Null liegt. Sie sind bei zufälligen Schreibvorgängen weniger geschickt, da bei einem SSD-Schreibvorgang ein ganzer Flash-Block (normalerweise 128 KB) gelesen, der Inhalt geändert und der gesamte Block wieder in Flash geschrieben werden muss. Bei langen, sequentiellen Vorgängen erzielen die besseren SSDs auf Verbraucherebene (Intel, OCZ Vertex, Samsung) weit über 200 MB / s Lesevorgänge und 80 MB bis 150 MB Schreibvorgänge, weit über dem, was eine einzelne sich drehende Festplatte produzieren kann.
John Rose
Bist du sicher? Ich verstehe nicht, warum ein Schreibvorgang das Lesen eines Datenblocks vor dem erneuten Ausschreiben beinhalten sollte ... Die zu schreibenden Daten sollten sich im Speicher des Computers befinden, nicht wahr?
Massimo
2
@Massimo: weil das Betriebssystem nur wenige Bytes schreibt, die SSD jedoch (normalerweise) in Einheiten (Seiten) von 128 KB arbeitet. Es kann nur eine Seite von 128 KB schreiben, nicht weniger, nicht mehr. Wenn Sie also beispielsweise die Mitte einer Seite ändern, liest das Laufwerk die gesamte Seite, aktualisiert die Mitte und schreibt die neue Seite normalerweise an einer anderen Stelle, während der alte Speicherort ungültig wird.
Cristian Ciupitu
Cristian Ciupitu ist richtig. Bei einigen SSDs wird dies durch einen integrierten Cache (alle Laufwerke, die den Indilinx-Controller verwenden, verfügen meines Erachtens über 64 MB Cache) und möglicherweise auch durch das Schreib-Caching des Betriebssystems, sofern aktiviert, verringert. Selbst ein 64-MB-Cache hat seine Grenzen - für einen Datenbankserver, der viele Schreibvorgänge ausführt, reichen 64 MB möglicherweise nicht aus. Firmware-Hersteller veröffentlichen nicht viele Details, aber man würde annehmen, dass die besseren Firmwares (Intel, Indilinx) eine intelligente Neuordnung / Stapelverarbeitung durchführen, um kleine zufällige Schreibvorgänge innerhalb einer 128-KB-Seite zu halten und diesen Overhead zu minimieren.
John Rose
Nach meinem Verständnis des Caches werden Ihnen viele dieser kleinen Schreibvorgänge erspart, über die Sie sich so große Sorgen machen. Es ist nicht einmal so wichtig, da Datenbanken für viele lineare Lese- / Schreibvorgänge ausgelegt sind. Ich wette, SSD würde immer noch besser funktionieren, da es ein lineares Lesen ist, kein seq. Dies bedeutet, dass es immer noch Lücken zwischen Daten gibt und SSD die Suchzeit verringern würde.
Pyrolistical
0

Es ist hier noch nicht genug, um es dem Kommentarthread hinzuzufügen, aber wenn Sie die Seitengröße / Anzahl der Mehrfachlesevorgänge der Datenbank für irgendetwas auf den SSDs auf ein Vielfaches der Seitengröße der SSD einstellen, sollte dies kein Problem sein.

Ich habe lange nicht mehr an SQL Server gearbeitet, daher bin ich mir nicht sicher, ob diese Optionen dort verfügbar sind. Ich habe in den letzten Jahren Oracle und DB2 ausgeführt, und dies würde Ihre Bedenken lösen, da die Datenbank ordnungsgemäß auf die Festplatteneigenschaften abgestimmt wäre.

Kevin K.
quelle
0

Ich würde empfehlen, die Partition auszurichten, in der Datenbankdateien gespeichert sind.

Ich würde auch empfehlen, zu entscheiden, was auf RAID 0 für perf (ldf und TempDB) läuft, und kritische Daten auf RAID 1 (mdf) zu platzieren.

Drittens sollten Sie die Firmware des Laufwerks sowie die Firmware / Treiber des SATA-Controllers wirklich aktualisieren. Auf diese Weise geben Sie dem Hardware-Unternehmen und seinen Entwicklern die Möglichkeit, die Leistung für Sie zu optimieren.

GregC
quelle
RAID 0 sollte niemals für einen Datenbankserver verwendet werden. Wenn ein einzelnes Laufwerk ausfällt, ist die Datenbank inaktiv, bis die Festplatte ersetzt und die fehlenden Daten vom Band wiederhergestellt wurden (einschließlich des Protokolls).
Mrdenny
In einer Welt, in der Geld keine Rolle spielt, sollte alles im batteriegepufferten L1-Cache laufen. In der Bankenbranche ist die LDF-Datei genauso wichtig wie die MDF-Datei. Für das wissenschaftliche Rechnen ist MDF die einzige Datei, die wirklich 100% sein muss.
GregC