SQL für optimale Leistung konfigurieren… SSD oder HDD?


8

Kennt jemand Vergleiche, die zeigen, wie SSDs mit HDDs verglichen werden, um die Leistung in einer SQL-Umgebung zu gewährleisten?

Ich versuche zu verstehen, welche Art von Leistungsvorteil durch die Umstellung auf SSD erzielt werden kann.


1
Ich bin sicher, dass eine Kopie des SQL-Standards auf SSDs genauso gut funktioniert wie auf Spinning-Platter-Festplatten. Oder interessieren Sie sich für einen bestimmten Implementierungsversuch des SQL-Standards?
womble

Antworten:


14

Wenn Sie eine große Anzahl kleiner Lesevorgänge ausführen, sind SSDs viel schneller. Hier ist einer der wenigen Vergleiche zur Datenbankleistung. In der unteren Grafik finden Sie die kurze Antwort.

Für die Rohleistung bieten SSDs viele Vorteile. Der Hauptvorteil besteht darin, dass die Suchzeit effektiv 0 beträgt, was bedeutet, dass alle kleinen HD-Treffer einer Datenbank viel schneller verarbeitet werden.

Bei der aktuellen Generation gibt es jedoch einige Bedenken hinsichtlich der Schreiblebensdauer, da nach so vielen Schreibvorgängen ein Block nicht mehr verwendet werden kann. Sie können ziemlich viel schreiben, ich glaube, die Informationen sagen ein Petabyte Bytes für ihre 32-GB-Laufwerke, bevor sie gefährliche Warenniveaus erreichen ... dies wird erst mit der Zeit besser.

Lesen Sie diesen Artikel von Anandtech über SSDs , um besser zu verstehen, warum sie so viel besser funktionieren . Er geht sehr detailliert auf Laufwerke ein, was gut ist, was nicht und wie sie funktionieren. Oben befindet sich auch ein Link zu einem Folgeartikel, der die neueste Serie von Laufwerken abdeckt.


2
In Bezug auf den Verschleiß aufgrund begrenzter Schreibzyklen nähern sich gute SSDs heutzutage der Sicherheit von sich drehenden Festplatten aufgrund einer Kombination aus größerer Schreibzyklusfähigkeit einzelner Zellen, Schreibzusammenführungstricks, um die erforderlichen Schreibblockzyklen zu reduzieren, und Verschleißnivellierung Algorithmen. Selbst für Anwendungen mit hoher E / A-Belastung wie eine sehr aktive Datenbank ist es nicht viel wahrscheinlicher, dass eine gute SSD vor dem routinemäßigen Austausch ausgeliefert wird als eine sich drehende Festplatte. Führen Sie einfach regelmäßige, regelmäßig getestete Backups durch, wie bei jeder Speicherlösung.
David Spillett

Ich stimme zu, deshalb nenne ich es ein Problem, kein Show-Stopper ... eine billige Festplatte hat momentan ein echtes Problem damit, und es ist eher ein Firmware-Problem. Ich glaube nicht, dass der Verschleiß innerhalb von 6 Monaten noch erhöht wird, er ist sehr gut und sehr schnell vorangekommen.
Nick Craver

1
Gute Antwort. Nur um es hinzuzufügen, würde ich denken, dass das Protokoll in den meisten Fällen auf einer normalen Festplatte verbleiben sollte, da es nacheinander geschrieben wird und Festplatten billig sind. Haben Sie einfach die eigentliche Datenbank auf einer SSD, da sich dort der Direktzugriff befindet.
PeteT

@PeteT - es variiert / hängt ein wenig ab, denken Sie daran, dass ein bestimmtes Protokoll sequentiell ja ist, aber auf einem Server, auf dem viele Datenbanken gehostet werden (wie Stack Exchange, auf dem viele Sites in einer Datenbank gehostet werden), ist das tatsächliche Verhalten dem Direktzugriff / Schreibvorgängen viel näher als sequentiell, es hängt also davon ab, was / wie viel Sie ausführen.
Nick Craver

Eine schöne Sache ist, dass eine SSD, wenn sie das Ende ihrer Lebensdauer erreicht und nicht mehr beschrieben werden kann, immer noch lesbar ist. Das kann man nicht über eine sich drehende Scheibe sagen, die kaputt geht.
Djangofan

4

Sie können Ihr Betriebssystem und Ihre SQL-Software auf einer Standardfestplatte installieren und dann eine SSD hinzufügen, um nur Ihre Datenbankdateien zu speichern. Dies sollte die Anzahl der Schreibvorgänge auf dem SSD-Laufwerk begrenzen und den verfügbaren Speicherplatz für Ihre Daten auf dem Laufwerk maximieren.



2

Die Antwort von Nick Craver ist gut; Ich möchte SSDs nur zwei Vorbehalte hinzufügen, von denen ich denke, dass die Leute sich dessen bewusst sein sollten:

a) Die Probleme der SSD mit dem Schreibverschleiß verschwinden nicht, sie sind für die verwendeten Flash-Zellen von grundlegender Bedeutung . SLC-Zellen haben eine viel höhere Schreibdauer als MLC, daher sollte das OP in Betracht ziehen, ein SLC-Laufwerk über MLC zu erhalten. Natürlich ist SLC auch deutlich teurer.

b) Aktuelle Laufwerke speichern Daten auf dem Laufwerk, bevor sie ausgeschrieben werden. Daher besteht die Gefahr eines Datenverlusts, wenn die Stromversorgung während eines Schreibvorgangs unterbrochen wird . Es ist etwas, das Sie umgehen können, aber der Cache dient sowohl der Leistung als auch der Reduzierung der Schreibverstärkung.

IMHO sind keine der oben genannten Dealbreaker. Ich wäre bereit, SSDs heute für die Produktion bereitzustellen, aber mit etwas Planung zuerst.

  1. Wenn ein winziges Risiko eines Datenverlusts nicht akzeptabel ist, sind herkömmliche SAS-Festplatten mit deaktiviertem Daten-Caching möglicherweise die bessere Wahl.
  2. Ich denke, Sie sollten die Datenmenge messen, die an einem normalen Tag auf das SSD-Laufwerk geschrieben wird. Berechnen Sie basierend auf diesen und den Verschleißspezifikationen des Herstellers die erwartete Lebensdauer der SSD anhand Ihres Verwendungsmusters. Wenn die erwartete Lebensdauer niedriger ist als die geplante Lebensdauer des Servers, legen Sie ein vorbeugendes Ersetzungsdatum für die SSD fest. Tauschen Sie es genau wie Flugzeugteile aus, bevor es wahrscheinlich ausfällt.

Flugzeugteile? Nicht die beste Analogie, wenn Sie sie auf NASAs-Shuttles ausweiten, die auf IBM AP101S-Computern mit satten 1 GB RAM und ohne Festplatte ausgeführt werden. Das Bedürfnis nach Vorhersehbarkeit und Zuverlässigkeit steht über allen anderen Überlegungen.
CJM

1

Einige Dinge zu beachten.

Wenn Sie die Datenbank so stark erreichen, dass Ihre Lesevorgänge langsamer werden und Sie SSDs benötigen, müssen Sie Ihre Indizes korrigieren oder versuchen, dem Server mehr RAM hinzuzufügen.

Die meisten Datenbankserver benötigen nach vollständiger Optimierung keine SSDs, um ordnungsgemäß zu funktionieren.


Meine Lesevorgänge verlangsamen sich nicht wirklich. Wir versuchen, eine "First-Hit" -Abfrage zu optimieren, bei der die erste Ausführung der Abfrage etwa 120 bis 130 ms und danach 80 ms dauert. Diese Zeiten schließen das Erstellen der Abfragepläne und das Lesen der relevanten Statistiken aus. Wir können sehen, dass der Zeitunterschied in unserem Fall mit dem Lesen von der Festplatte verbracht wird. Versuchen Sie also herauszufinden, wie ich diesen ersten Treffer näher an die 80 ms bringen kann.
Spoon16

Also dauert es auch nach dem ersten Lauf noch 80ms? Sind das meistens Datenlesevorgänge oder viel CPU (Aggregation oder Sortierung)? Denken Sie immer noch, dass es viel Raum für "traditionelle" Optimierung gibt, bevor Sie zu exotischen Speichertechnologien wechseln.
BradC

Wenn Sie beim ersten Ausführen der Abfrage auf die Festplatte gehen müssen, wirft SQL die Daten aus irgendeinem Grund aus dem Cache. Möglicherweise möchten Sie zunächst die Lebenserwartung Ihrer Seite überprüfen. Wenn es niedrig ist, ist mehr RAM in Ordnung. Wie hoch ist Ihre Cache-Trefferquote vor, während und nach der Abfrage? Wenn es unter 99,8% liegt, sind Indizierung und mehr RAM in Ordnung. Machst du irgendwelche Scans? Wenn ja, ist möglicherweise mehr Indizierung angebracht.
Mrdenny

Bei einer schreibintensiven Arbeitslast mit Durchschreib-Caching (dh Daten, die physisch auf der Festplatte festgeschrieben werden, bevor der Anruf zurückgegeben wird) sollten Sie eine deutlich bessere Schreibleistung von einer SSD erhalten, vorausgesetzt, Ihre Anwendung ist tatsächlich E / A-gebunden. Beachten Sie, dass dies die bevorzugte Caching-Strategie für SQL Server ist, insbesondere für SANs, und dass MS SANs benötigt, um dieses Verhalten zu gewährleisten und eine Zertifizierung für die Verwendung mit SQL Server zu erhalten.
ConcernedOfTunbridgeWells

1

Lesen Sie diesen Artikel (ziemlich alt - 2009):

Zusammenfassung: Ersetzen Sie SAS-Laufwerke mit 24 x 15.000 U / min durch 6 (ja sechs) SSDs und erhalten Sie dennoch 35% mehr Leistung. Dies war bei Intel X25Ms der Fall, die für SSDs nicht mehr der Spitzenreiter sind.

Für Datenbankleute ist dies fantastisch, da Sie kleinere, schnellere Server mit weniger Strom haben können.


1

Eine zu berücksichtigende Sache ist, das Transatcion-Protokoll auf einer Festplatte und Ihr MDF auf einer SSD zu haben. Auch die Lebensdauer hängt stark vom Anwendungstyp ab. OLTP kann jedoch schnell brennen, wenn relativ statische Daten keine Probleme haben sollten.


1

Meine eigenen Erfahrungen waren hier gemischt ...

Testen unter Windows 7 mit SQL Server 2008 Express R2. Läuft auf einem i7-Desktop mit einer Sandy Bridge und einem installierten 12G-RAM (DDR3, glaube ich?). Entschuldigen Sie, dass das Setup Desktop ist. Ich habe kurz nach dem Entwurf festgestellt, wie viele Datensätze ich auf der i7-Plattform verwalten kann, bevor ich einen Server erstelle.

Ich habe diese Tests zuerst auf dem installierten 1,5-TB-Laufwerk mit 7200 U / min ausgeführt, um die Basiszeiten zu ermitteln.

10.000 Datensätze mit aktualisierten Prozessen, optimierte die Tabellen, um die zuvor verwandten Daten in einer flachen Tabelle zu speichern, fügte Indizes hinzu, bis ich die Zeitangaben auf einige Sekunden als Ausgangspunkt reduzierte, dann duplizierte ich die Datensätze auf 1,2 Millionen und bekam ein Zeitplan von 0: 3: 37 für die gleichen Updates. 3 1/2 Minuten sind nicht schlecht für dieses Nicht-Raid-Setup.

Wenn ich die Rekorde auf 2,56 Millionen übertrug, bekam ich ein Timing von 0:15:57 - fast eine 5-fache Steigerung. Wahrscheinlich hauptsächlich aufgrund von Paging über den installierten 12G-Speicher hinaus.

Installierte das SSD-Laufwerk und verschob die Datenbanken, das Timing erhöhte sich tatsächlich auf etwas mehr als 20 Minuten. Ich gehe davon aus, dass dies daran liegt, dass sich Auslagerungsdateien pro Festplatte befinden und standardmäßig keine auf dem SSD-Laufwerk vorhanden waren, da es nicht als Betriebssystemlaufwerk installiert war (Bluescreens in Hülle und Fülle, als ich das versuchte).

Es wurde eine Auslagerungsdatei zum SSD-Laufwerk hinzugefügt und der Test erneut durchgeführt, 0: 5: 52-m, sodass die Auslagerungsdatei den Trick ausgeführt zu haben scheint, aber ich bin mir aus den oben genannten Gründen nicht sicher, ob eine Auslagerungsdatei für ein SSD-Laufwerk gut geeignet ist. Sie sind stark beschriftet und können zu einer übermäßigen Abnutzung des Laufwerks führen.

Eine Einschränkung, ich habe auch Smartboost auf diesem Laufwerk aktiviert und das hat möglicherweise auch das Timing beeinflusst, wird ohne es erneut ausgeführt.

Mein bester Eindruck davon ist, dass es heutzutage einfacher ist, Speicher hinzuzufügen, und für die Kosten würde ein Raid 0 + 1 von Hybrid-Festplatten ohne die Probleme fast genauso gut funktionieren.

Bearbeiten: Deaktivierte die Auslagerungsdatei auf der SSD und ließ Smart Boost seine Sache machen. Das Timing verbesserte sich von 5:52 Minuten auf 4:55 Minuten für 2,56 Millionen Datensätze mit jeweils 3 Updates. Ich werde als nächstes den 8G-SSD-Cache auf dem 750G-Hybridlaufwerk von Seagate ausprobieren. dann, wenn das nicht schlecht ist, werde ich sie in Raid 0 + 1 versuchen.

Letztes Update dazu, da dies ein alter Thread ist - aber ich wollte die Ergebnisse, die ich dort veröffentlicht habe, veröffentlichen, damit jemand sie finden kann.

Verschieben der Datenbank auf den Seagate 750G Hybrid mit einem 8G SSD-Cache Ich habe den Test einige Male ausgeführt, damit der SSD-Cache lernen kann. Ich habe 5:15 m: s Zeit für denselben Test und aktualisiere 2,56 Millionen Datensätze - das ist nahe genug an der SSD-Leistung (4:55 m: s mit Intel Smartboost), damit ich die Kosten berücksichtigen kann.

Mit rund 50 US-Dollar mehr (239 US-Dollar gegenüber derzeit 189 US-Dollar) bietet der Hybrid mehr als das 6-fache des Speichers und nahezu die gleiche Leistung, ohne dass zusätzliche Software zur Optimierung ausgeführt werden muss. Bei einem Raid 0 + 1 erwarte ich, dass sich das Timing erheblich verbessert und dieses Laufwerk eine 5-jährige Garantie hat. Ich hoffe, ich brauche es nicht.


0

Persönlich würde ich aus den bereits genannten Gründen keine SSDs verwenden. Sie werden allmählich langsamer, bevor sie schließlich versagen. Wir wissen noch nicht genau, wann dies sein wird - aktuelle Schätzungen sind genau das - Schätzungen. Erinnerst du dich, als wir alle Anfang / Mitte der 80er Jahre diese "unzerstörbaren" CDs gekauft haben? Einige Jahre später betrachteten wir die Speicherung von Daten auf CD als ebenso töricht wie die Verwendung von Disketten.

Wenn Sie Ihre Hardware, Ihr Betriebssystem und Ihre Datenbank richtig konfiguriert haben, müssen Sie nicht auf SSDs spielen.

In einigen Jahren, wenn die Produkte etwas gereift sind, wird es ein anderes Szenario geben. Aber bis dann...


0

Der Microsoft Research-Artikel befasst sich eher mit den Kosten pro GB als mit dem Leistungsgewinn. Es passt nicht zu den Laufwerken und testet sie, verwendet jedoch einen Retro-Casting-Algorithmus, der auf Protokolldateien von tatsächlichen Servern basiert.

Einige Dinge, die bei SSD und SQL in den Sinn kommen:

1 / Wenn Sie es versäumen, die richtigen Indizes hinzuzufügen, ist SSD viel verzeihender, da die zufälligen Suchzeiten so niedrig sind.

2 / Die Kosten sind deutlich niedriger als zu dem Zeitpunkt, als diese Studie durchgeführt wurde, und bei kleinen Webanwendungen, z. B. beim Ausführen des Back-End einer Telefon-App und nicht von Exchange-Unternehmensservern, kann die Leistung Kosten bei der Einstellung eines Beraters für die Optimierung von SQL Server sparen.

3 / Ein einzelnes SSD-Laufwerk mit Schattenkopie muss sicherlich billiger sein als ein Bündel Spindeln in einem RAID-Gehäuse sowie der Controller und die Anschlüsse. Ganz zu schweigen von Strom, Heizung und Platz im Rack.

4 / Spindeln sind bekannt dafür, dass sie der Teil sind, der am häufigsten auf einem Computer stirbt. SSD hat keine beweglichen Teile und eine Stunde Ausfallzeit kann den Preis einer SSD auf einmal kosten.

5 / Verschleiß ist ein Problem, aber sie haben Möglichkeiten, es zu verwalten (mit Streublöcken), die möglich sind, weil zufällig fragmentierte Daten eine SSD nicht verlangsamen. Außerdem wird eine kleine Datenbank auf einer großen Festplatte wahrscheinlich nicht rechtzeitig abgenutzt sein, um in Zukunft eine billigere neue zu kaufen.

6 / Es gibt einen Trend zu nicht relationalen Datenbanken und Joins in der mittleren Ebene. Dies könnte die Dinge wirklich ändern: E / A zu einfachen nicht indizierten Tabellen auf SSD-Laufwerken auf Shards ohne Leistungseinbußen und mit einem viel einfacheren Skalierungsvorschlag. Speichern Sie auch SQL Server-Lizenzen pro Shard.

7 / Das ist alles theoretisch. Wenn jemand reale Leistungstests gegen Spindeln hat, würde ich gerne sehen.

Luke

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.