Frage Um die SQL-Leistung zu verbessern, sollten Sie nicht einfach viel RAM bereitstellen, statt schnellere Festplatten zu haben.


Die Leute sagen mir immer wieder, dass, um die Leistung eines SQL-Servers zu verbessern, die schnellsten Festplatten mit RAID 5 usw. gekauft werden können.

Also dachte ich, anstatt das ganze Geld für RAID 5 und super-schnelle Schnellfestplatten auszugeben (was übrigens nicht billig ist), warum nicht nur Tonnen von RAM bekommen? Wir wissen, dass ein SQL-Server die Datenbank in den Speicher lädt. Speicher ist wayyyy schneller als alle Festplatten.

Warum nicht gleich 100 GB RAM auf einen Server stopfen? Dann benutze einfach eine normale SCSI-Festplatte mit RAID 1. Wäre das nicht viel billiger und schneller?


31
2018-02-13 00:39


Ursprung


Wer Ihnen RAID 5 sagt, hat keine Ahnung. Wenn Ihnen die Leistung wirklich wichtig ist, verwenden Sie RAID 10 - MDMarra
Wofür steht das D in ACID? Irgendwann wirst du Sachen schreiben müssen. - Adam Musch


Antworten:


Ihre Analyse ist in Ordnung - bis zu einem gewissen Punkt - in dem es die Dinge absolut schneller machen wird. Sie müssen jedoch noch ein paar andere Probleme berücksichtigen:

  1. Nicht jeder kann sich genügend Speicher leisten; Wenn Sie mehrere Terabyte an Daten haben, müssen Sie sie einige Zeit auf die Festplatte legen. Wenn Sie nicht viele Daten haben, ist alles schnell genug.

  2. Die Schreibleistung für Ihre Datenbank wird weiterhin von den Festplatten begrenzt, sodass Sie die Versprechen halten können, dass die Daten tatsächlich gespeichert wurden.

Wenn Sie einen kleinen Datensatz haben oder ihn nicht auf Festplatte speichern müssen, ist Ihre Idee nicht falsch. Werkzeuge wie VoltDB arbeiten daran, die Overheads zu reduzieren, die ältere Annahmen in RDBMS-Implementierungen verursachen, die die reine In-Memory-Leistung einschränken.

(Nebenbei bemerkt, Leute, die Ihnen sagen, RAID-5 für die Datenbank-Performance zu verwenden, sind wahrscheinlich keine großartigen Leute, die sich das Thema anhören, da es fast nie die beste Wahl ist - es hat eine gute Leseleistung, aber schlechte Schreibleistung und schreibt sind fast immer die Produktionsbeschränkung - weil Sie RAM in Caching werfen können, um die meisten Leistungsprobleme auf der Leseseite zu lösen.


51
2018-02-13 00:42



Allgemeine Benutzer beschweren sich immer über Leseprobleme. Selten bei Schreibproblemen - user1034912
@ user1034912 - variiert je nach Anwendungsfall und Benutzern. Im Allgemeinen sind Probleme mit der Schreibleistung schwerer zu lösen und führen zu größeren Einschränkungen der Gesamtsystemleistung, was bedeutet, dass sie sich beim Lesen des Problems über das Schreibproblem beschweren ... - Daniel Pittman
@ user1034912, Benutzer sehen normalerweise keine Schreibverzögerungen, daher sind sie sich ihrer nicht bewusst. Der größte Teil dessen, was Benutzer als Leseverzögerungen sehen, ist auf langsame Abfragen und nicht auf langsame Festplatten zurückzuführen. - John Gardeniers
Eine ausgezeichnete Antwort! @ user1034912 sie könnten sich über Leseprobleme beklagen, die natürlich eine Folge von schlechter Schreibperformance (und schlechtem Skalierungsgleichzeitigkeitscode) sein könnten. - Alex
RAID5 in relationalen Datenbanken: en.wikipedia.org/wiki/... - Ich sage nicht, dass du falsch liegst, aber die konventionelle Weisheit basiert vielleicht auf alten Informationen. Persönlich verwende ich RAID5 nicht mehr; Ich benutze RAID6, es sei denn es ist zu langsam. - gWaldo


Kurze Version: Betrachten Sie die Größe des Arbeitssatzes. Lange Version: Wie groß sind Ihre Daten? Wenn es in den Speicher eines modernen Servers passt, ja, Sie haben absolut Recht. Leider kann der größte Xeon momentan 2 TB RAM adressieren, und das ist kein großer Datensatz mehr. Wenn Sie keine Maschine kaufen können, die groß genug ist, um Ihr gesamtes Arbeitssatz im RAM unterzubringen, müssen Sie Probleme mit Ihrem Gehirn lösen, nicht mit Ihrem Geldbeutel.


11
2018-02-13 02:09



+1 für den letzten Satz, der extrem zitierbar ist. : D - pkoch


Wenn Sie Geschwindigkeit wollen:

  • Erhöhen Sie den Arbeitsspeicher, so dass mindestens häufig verwendete Indizes vollständig in den Arbeitsspeicher passen (zum Beispiel, auf einem System, an dem ich arbeite, sind 32 GB RAM genug für eine Datenbank mit 350 GB, da Indizes im RAM und nicht Rohdaten benötigt werden)
  • Verwenden Sie RAID10 mit beliebigen Festplatten (schnellere Festplatten sind besser)
  • Vermeiden RAID5
  • Mdf, ldf und temp DB auf diskrete Spindel-Sets aufteilen (Beispiel: tempdb auf seinem eigenen RAID1-Set, ldf auf seinem eigenen RAID1 oder RAID10-Spindel-Set, mdf auf einem RAID 10-Set mit mindestens 4 Festplatten)

Befolgen Sie diese Schritte, und SQL Server wird fliegen.

Dann, wenn Sie möchten, fügen Sie mehr RAM hinzu ... aber tun Sie das oben genannte zuerst, und Sie können gut finden, dass Sie fertig sind.


8
2018-02-13 18:35





RAM ist die neue Festplatte, Festplatte ist die neue Kassette.

Im http://www.tbray.org/ongoing/When/200x/2006/05/24/On-Grids. Beachten Sie, dass das vor sechs Jahren war. Ja, wir haben Datenbanksysteme, die versuchen (und versuchen), das gesamte Dataset im RAM zu halten und eher auf mehrere Maschinen zu sharden, als die Platte zu benutzen, weil die Platte ohnehin um Größenordnungen langsamer ist. Sie müssen das Dataset auf die Festplatte schreiben, aber wie im obigen Motto, ähnelt das eher einer Hintergrund-Backup-Aufgabe als einer Online-Operation. Haltbarkeit wird erreicht, indem nur Protokolle mit diesen Datenbanken angehängt werden (ich denke an MongoDB und Redis, aber es gibt Tonnen mehr).


2
2018-02-13 02:40



-1 weil so schön das Zeug ist, ist es nicht wirklich zugänglich oder für die meisten Apps oder die meisten von uns hier geeignet. Für bis zu 500 GB Daten (oder sogar mehr) benötigen Sie nur zwei SQL Server (primär und Backup), und Sie haben eine wirklich schnelle Verwendung von normalen Tools für Hunderte oder Tausende von Benutzern. Nur wenige von uns müssen auf Hunderttausende von gleichzeitigen Benutzern oder mehrere Rechenzentren skalieren, so dass die Komplexität Ihres vorgeschlagenen Ansatzes den Nutzen für die meisten von uns bei weitem überwiegt. IOW: Vertikale Skalierung ist einfach, billig und effektiv für alle, die nicht Facebook oder Google sind. - samsmith


Diese Frage ähnelt einer grundlegenden Frage, die in den letzten 5-10 Jahren zu einer Vielzahl von Forschungs- und Entwicklungsarbeiten in Datenbankarchitekturen geführt hat. Jetzt, wo es möglich ist, eine ganze Datenbank für viele Anwendungsfälle im RAM zu speichern, muss die Datenbank so entworfen werden, dass sie im Arbeitsspeicher arbeitet, anstatt einfach veraltete Architekturen auf RAM-basierten Speicher anzuwenden.

Genauso wie viele kleinere und speziellere Sprachen in den letzten Jahren weit verbreitet wurden, treten wir in eine Ära ein, in der mehr spezielle Datenbanken benötigt werden.

Für weitere Informationen zu diesem Thema empfehle ich die wissenschaftliche Arbeit Das Ende einer architektonischen Ära (Es ist Zeit für eine vollständige Neuschreibung). Es ist nicht schwer zu lesen.

Es ist unklar, ob sich diese Frage speziell auf SQL Server bezieht. Das Originalplakat sollte dies verdeutlichen.

Daniel Pittman schrieb:

Wenn Sie einen kleinen Datensatz haben oder ihn nicht auf Festplatte speichern müssen, ist nichts falsch mit Ihrer Idee. Tools wie VoltDB arbeiten daran, den Overhead zu reduzieren, den ältere Annahmen in RDBMS-Implementierungen haben, die die reine In-Memory-Performance einschränken.

Die Reduzierung der Gemeinkosten von älteren Annahmen in RDBMS - Implementierungen war genau das Entwurfsziel von VoltDB, aber es skaliert horizontal ohne architektonische Begrenzung der Datengröße, und es kann auf Festplatte für volle Haltbarkeit mit Snapshotting und Befehlsprotokollierung bestehen bleiben.


1
2018-02-15 21:55





Wenn Sie einen Server mit genügend RAM erhalten, um zumindest den heißen Teil Ihres Datasets zu speichern, ist alles in Ordnung. Auch RAID 1 und 5 sind nicht der schnellste Weg, um Ihre Daten zu ordnen - RAID 0 ist schneller, aber dann müssen Sie die höheren Chancen eines Dateisystemfehlers in Betracht ziehen, der Ihre Datenbank auslöscht - keine schöne Sache . Sie können RAID 1 oder RAID 5 für Ihr RAID 0-Array verwenden, sofern Sie über genügend Laufwerke und Controller verfügen.

Sie können hier sogar mit der Replikation spielen - schreiben Sie auf einen Festplatten-schweren Server, der auf einen oder mehrere speicherintensive Server repliziert, auf denen Sie komplizierte Abfragen ausführen.

Traurigerweise scheinen RDBMS im großen Eisenreich zu liegen - sie sind nicht so einfach horizontal zu wachsen.


0
2018-02-13 12:38





Dies ist ein Fall von "es hängt davon ab, was Sie tun." Vielleicht ist der "richtige" Rat, SQL komplett zu vermeiden und memcache / redis / etc zu verwenden!

Ich stimme Ihnen zu, dass zusätzliches RAM viel hilft, besonders wenn Sie das gesamte Arbeitssatz in RAM lesen können. Ja, es wird immer noch Daten schreiben müssen, aber wenn Sie hauptsächlich Lesevorgänge haben, haben die Schreibvorgänge keine Konkurrenz für Festplatten-E / A.

Die Festplattenleistung ist jedoch oft ein Engpass auf SQL-Servern und schwieriger als andere Dinge wie RAM, um später zu aktualisieren (wenn Sie einen Server haben, der nicht vollständig mit DIMMs bestückt ist).

Es gab eine Reihe von Bemerkungen darüber, dass RAID5 langsam ist, aber ich würde sagen, dass dies nicht immer der Fall ist, also seien Sie vorsichtig, bevor Sie umfassende Anweisungen machen. Wirklich High-End-Server mit schnellen RAID-Karten und viel BBWC gehen manchmal in RAID5 (oder RAID50 mit> 4 Festplatten) viel schneller als in RAID10 ...

Im Laufe der Jahre habe ich selbst langsame RAID5-Arrays erlebt, aber nachdem wir in 2009 einen DL360 G5 mit 4 146G SAS-Festplatten getestet hatten, mussten wir unsere Tests noch einmal überprüfen. In der Tat ging das Array in fast jedem Test mit RAID5 schneller als mit RAID10. BBWC und schnelle Paritätsberechnungen ermöglichten es dem Server, die vier Festplatten viel effektiver als ein RAID5-Array als RAID10 zu verwenden. Einige der Tests zeigten einen um 50% besseren Durchsatz mit RAID5, und fast keiner war langsamer. Die Tests, die langsamer waren, waren nur 5-10% weg.

Ich würde die Leute warnen, die pauschal sagen, dass RAID5 langsam ist, jeder sagt es online, aber es ist einfach nicht in jedem Fall wahr.


0
2018-02-15 23:31





Sie haben eine Mischung aus Süßigkeiten zur Auswahl und hängt wirklich davon ab, was der Geschmack Sie wollen.

  1. DBs haben eine Konfiguration, um Abfragen zu cachen und wo dieser Cache existiert, Speicher oder Festplatte.
  2. RAID 5 ist nicht immer das schnellste, aber RAID 0 (JBOD) ist ein Stripe und ist schnell, da RAID 5 auch ein Stripe ist, ist die Idee ähnlich.
  3. RAID 1 verbessert nicht die Geschwindigkeit, es ist nur ein Spiegel.
  4. Die SQL-Leistung basiert auf der Indizierung und wird zuerst überprüft. Sehr wichtig in relationalen Datenbanken.
  5. Indexieren Sie nicht alles, die Indizierung kann auch die Geschwindigkeit reduzieren, da Ihre Indexierung überladen wird.
  6. Manchmal mit SQL Joins wird die Datenbank langsamer. Das Programmieren, um eine Reihe von minimalen indexierten Ergebnissen zu loopen, verbessert die Geschwindigkeit.
  7. Virtuelle Server sind ein Albtraum auf Geschwindigkeit, wenn Sie nicht die Dollar zahlen.

Einfach in das Wissen investieren (kostenlos), bevor man Geld ausgibt. 1. Lerne die Konfigurationen für deine Datenbank und schaue dir deine aktuelle Konfiguration an, um sie zu optimieren. 2. Sehen Sie sich die Programmier- und SQL-Anweisungen, den Komponententest mit einfachen Skripten an, die die beteiligten Vorgänge nachahmen, möglicherweise ist es nicht einmal das, was Sie für das Problem halten. Wenn die einfachen Skripte Zeit mit SQL Joins belegen, teilen Sie sie auf und machen dasselbe mit einer programmierten Schleife, um das Gleiche zu tun. Dies ist, wo Speicher helfen kann 3. Sehen Sie sich den Hosting-Plan und Server an. Verwenden Sie ps aux in einer Linux-Konsole und sehen Sie, ob etwas Ihren Speicher und Prozessor ansaugt.

Das Absolute Festplatte verbessert die Geschwindigkeit, aber nicht in einem virtuellen Serverraum. Der Speicher verbessert die Geschwindigkeit nicht, es sei denn, Sie konfigurieren die Dienste dafür. Striped RAID (0,5), RPM und synchrones Lesen / Schreiben mit einem schnellen Bus helfen dabei. Ein Core-Prozessor mit gutem l1, l2, l3 Cache wird helfen, Engpässe zu verarbeiten. kann ich es für Xeon hören!


-1
2018-02-13 18:23



RAID1 wird die Geschwindigkeit in Lesesituationen absolut verbessern. Die meisten Controller sind intelligent genug, um mehrere Spindeln gleichzeitig aus den (identischen) Datensätzen zu lesen. RAID0 ist eine schlechte Idee, weil Sie auf eine Spindel zu einer Zeit beschränkt sind. - Bryan Boettcher


Insgesamt müssen Sie Größe und Skalierbarkeit im Auge behalten. Während Sie mit kleinen Speicheranforderungen beginnen mögen, werden Ihre Daten sehr schnell und exponentiell wachsen. DBs verwenden am besten atomare Daten, bei denen es sich um Daten handelt, die auf die kleinstmögliche Größe herunter gebrochen sind. Aufgrund der geringen Größe wird es im Data Warehouse schneller übertragen. Dann berücksichtigen Sie auch die DB-Struktur. In Zukunft könnten Sie mit externen DBs verlinken, weshalb auch die Struktur entscheidend ist. In diesem Szenario würde es für Ihre Abfrage wenig Sinn machen, wenn die Hälfte der Daten außerhalb Ihres Datamarts liegt. Wenn Daten abgefragt werden, besteht der Zweck nicht darin, gespeicherte Daten im RAM zu speichern; Stattdessen sollte die Abfrage schnell auf Daten zugreifen und sie zurückgeben.

  • Sie verwenden RAID 5 nicht unbedingt für Daten. Es hängt von den Daten und deren Wichtigkeit ab, neben dem, was zuvor über Backups erwähnt wurde. RAID 1 kann verwendet werden und ist.
  • Sie müssten alle Server innerhalb Ihres Abfragebereichs aktualisieren, um die Geschwindigkeit zu erhöhen. Da sich viele Daten außerhalb Ihrer Kontrolle befinden, wird es irgendwo außerhalb Ihres Datamarts zu Engpässen kommen. (Für den Fall, dass Sie Ihr eigenes Upgrade durchführen)

-4
2018-02-13 04:24



Wow, hast du das aus deinen (falschen) Lehrbüchern kopiert? - adaptr
Pfui. Wie oft muss den Leuten gesagt werden, dass RAID keine Backup-Lösung ist? - Cromulent