Um die SQL-Leistung zu verbessern, sollten Sie nicht einfach viel RAM einsetzen, sondern schnellere Festplatten verwenden.


31

Um die Leistung eines SQL-Servers zu verbessern, sollten Sie die schnellstmöglichen Festplatten mit RAID 5 usw. kaufen.

Also dachte ich, anstatt das ganze Geld für RAID 5 und superschnelle Festplatten (was übrigens nicht billig ist) auszugeben, warum man nicht einfach Tonnen RAM bekommt? Wir wissen, dass ein SQL Server die Datenbank in den Speicher lädt. Der Speicher ist viel schneller als alle Festplatten.

Warum nicht 100 GB RAM auf einem Server einbauen? Verwenden Sie dann einfach eine normale SCSI-Festplatte mit RAID 1. Wäre das nicht viel billiger und schneller?


33
Wer Ihnen RAID 5 erzählt, hat keine Ahnung. Wenn Sie wirklich
Wert auf

5
Wofür steht das D in ACID? Irgendwann musst du etwas aufschreiben.
Adam Musch

Antworten:


51

Ihre Analyse ist in Ordnung - bis zu einem gewissen Punkt -, da sie die Dinge auf jeden Fall beschleunigen wird. Sie müssen jedoch noch einige andere Probleme berücksichtigen:

  1. Nicht jeder kann sich genug Gedächtnis leisten; Wenn Sie mehrere Terabyte an Daten haben, müssen Sie diese 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 Datenträgern eingeschränkt, sodass Sie das Versprechen einhalten können, dass die Daten tatsächlich gespeichert wurden.

Wenn Sie einen kleinen Datensatz haben oder ihn nicht auf der Festplatte speichern müssen, ist Ihre Idee nicht falsch. Tools wie VoltDB arbeiten daran, den Overhead zu verringern, den ältere Annahmen in RDBMS-Implementierungen verursacht haben und der die reine In-Memory-Leistung einschränkt.

(Abgesehen davon sind die Leute, die Ihnen sagen, dass Sie RAID-5 für die Datenbankleistung verwenden sollen, wahrscheinlich nicht besonders empfehlenswert, da dies fast nie die beste Wahl ist - es bietet eine gute Leseleistung, aber eine schlechte Schreibleistung und Schreibvorgänge sind fast immer die Produktionsbeschränkung - weil Sie RAM in das Caching werfen können, um die meisten Performance-Probleme auf der Leseseite zu lösen.)


1
Allgemeine Benutzer beschweren sich immer über Lesefehler. Schreibe selten Probleme
user1034912

2
@ user1034912 - variiert je nach Anwendungsfall und Benutzer. Im Allgemeinen sind Probleme mit der Schreibleistung schwerer zu lösen und schränken die Gesamtsystemleistung am Ende stärker ein. Wenn Sie das Leseproblem lösen, beschweren Sie sich über das Schreibproblem ...
Daniel Pittman

2
@ user1034912, Benutzer sehen normalerweise keine Schreibverzögerungen, sind sich ihrer also nicht bewusst. Die meisten Leseverzögerungen sind auf langsame Abfragen und nicht auf langsame Datenträger zurückzuführen.
John Gardeniers

Eine hervorragende Antwort! @ user1034912 Sie können sich über Lesefehler beschweren, die natürlich eine Folge der schlechten Schreibleistung (und des schlecht skalierten Nebenläufigkeitscodes) sein können.
Alex

RAID5 in relationalen Datenbanken: en.wikipedia.org/wiki/… - Ich sage nicht, dass Sie sich irren, aber die konventionelle Weisheit basiert möglicherweise auf alten Informationen. Ich persönlich benutze kein RAID5 mehr. Ich verwende RAID6, es sei denn, es ist zu langsam.
gWaldo

11

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


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

8

Wenn Sie Geschwindigkeit wollen:

  • Erhöhen Sie den Arbeitsspeicher, damit mindestens häufig verwendete Indizes vollständig in den Arbeitsspeicher passen (auf einem System, auf dem ich arbeite, reichen 32 GB Arbeitsspeicher für eine Datenbank mit 350 GB aus, da Indizes das sind, was Sie im Arbeitsspeicher benötigen, keine Rohdaten).
  • Verwenden Sie RAID10 mit allen Datenträgern (schnellere Datenträger sind besser)
  • Vermeiden Sie RAID5
  • Teilen Sie mdf, ldf und temp DB auf einzelne Spindelsätze auf (Beispiel: tempdb auf einem eigenen RAID1-Satz, ldf auf einem eigenen RAID1- oder RAID10-Spindelsatz, mdf auf einem RAID 10-Satz mit mindestens 4 Festplatten)

Befolgen Sie diese Schritte, und SQL Server wird fliegen.

Fügen Sie dann, wenn Sie möchten, mehr RAM hinzu, aber führen Sie zuerst die obigen Schritte aus, und Sie werden möglicherweise feststellen, dass Sie fertig sind.


2

RAM ist die neue Festplatte, Festplatte ist das neue Band.

In http://www.tbray.org/ongoing/When/200x/2006/05/24/On-Grids . Beachten Sie, dass es vor sechs Jahren war. Ja, wir haben Datenbanksysteme, die sich bemühen, den gesamten Datenbestand im RAM zu halten (und es auch zu versuchen) und die eher auf mehrere Computer verteilt sind, als den Datenträger zu verwenden, da der Datenträger ohnehin um ein Vielfaches langsamer ist. Sie müssen den Datensatz auf die Festplatte schreiben, aber wie im obigen Motto ist dies eher eine Hintergrund-Backup-Aufgabe als eine Online-Operation. Die Haltbarkeit wird erreicht, indem nur Protokolle mit diesen Datenbanken angehängt werden (ich denke MongoDB und Redis, aber es gibt Tonnen mehr).


4
-1 Weil dieses Zeug so schön ist, ist es für die meisten Apps oder die meisten von uns hier nicht wirklich zugänglich oder angemessen. Für bis zu 500 GB Daten (oder mehr) benötigen Sie lediglich zwei SQL-Server (Primär- und Sicherungsserver), und Sie können ganz schnell normale Tools für Hunderte oder Tausende von Benutzern verwenden. Nur sehr wenige von uns müssen auf Hunderttausende gleichzeitige Benutzer oder mehrere Rechenzentren skalieren, sodass 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.
Jonesome Reinstate Monica

1

Diese Frage ähnelt einer grundlegenden Frage, die in den letzten 5 bis 10 Jahren zu viel Forschung und Entwicklung in Bezug auf Datenbankarchitekturen geführt hat. Da es für viele Anwendungsfälle möglich ist, eine gesamte Datenbank im RAM zu speichern, muss die Datenbank so konzipiert werden, dass sie im RAM arbeitet, anstatt einfach ältere vererbte Architekturen auf RAM-basierten Speicher anzuwenden.

So wie in den letzten Jahren viele kleinere und speziellere Sprachen in großem Umfang eingeführt wurden, werden wir in eine Ära eintreten, in der speziellere Datenbanken benötigt werden.

Für eine weiterführende Lektüre zu diesem Thema empfehle ich die wissenschaftliche Arbeit The End of a Architectural Era (Es ist Zeit für ein vollständiges Umschreiben) . Es ist keine schwierige Lektüre.

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

Daniel Pittman schrieb:

Wenn Sie einen kleinen Datensatz haben oder ihn nicht auf der Festplatte speichern müssen, liegt an Ihrer Idee nichts> falsch. Tools wie VoltDB arbeiten daran, den Overhead zu verringern, den ältere Annahmen in RDBMS-Implementierungen verursacht haben und der die reine In-Memory-Leistung einschränkt.

Das Reduzieren des Overheads von älteren Annahmen in RDBMS-Implementierungen war genau das Entwurfsziel von VoltDB . Es lässt sich jedoch ohne architektonische Beschränkung der Datengröße horizontal skalieren und kann mithilfe von Snapshots und Befehlsprotokollierung dauerhaft auf der Festplatte gespeichert werden.


0

Wenn Sie einen Server mit genügend RAM haben, um zumindest den wichtigen Teil Ihres Datasets zu speichern, ist alles in Ordnung. Auch RAID 1 und RAID 5 sind nicht die schnellste Methode, um Ihre Daten zu ordnen. RAID 0 ist schneller. Dann müssen Sie jedoch die höhere Wahrscheinlichkeit eines Dateisystemfehlers in Betracht ziehen, durch den Ihre Datenbank gelöscht wird . 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 festplattenintensiven Server, der auf einen oder mehrere speicherintensive Server repliziert, auf denen Sie komplizierte Abfragen ausführen.

Leider scheinen sich RDBMS im großen eisernen Bereich zu befinden - es ist nicht so einfach, sie horizontal zu vergrößern.


0

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

Ich stimme Ihnen zu, dass zusätzlicher Arbeitsspeicher sehr hilfreich ist, insbesondere wenn Sie den gesamten Arbeitsspeicher in den Arbeitsspeicher einlesen können. Ja, es müssen noch Daten geschrieben werden, aber wenn Sie meistens gelesen haben, haben die Schreibvorgänge keine Auswirkungen auf die Festplatten-E / A.

Die Festplattenleistung ist jedoch häufig ein Engpass auf SQL-Servern und schwieriger als andere Dinge wie RAM, die später aktualisiert werden müssen (wenn Sie einen Server haben, der nicht vollständig mit DIMMs bestückt ist).

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

Im Laufe der Jahre habe ich persönlich langsame RAID5-Arrays erlebt, aber nachdem wir im Jahr 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 mit RAID5 in fast jedem Test schneller als mit RAID10. Durch BBWC-Berechnungen und schnelle Paritätsberechnungen konnte der Server die 4 Festplatten wesentlich effektiver als RAID5-Array als RAID10 einsetzen. Einige der Tests zeigten mit RAID5 einen um 50% besseren Durchsatz, und fast keiner war langsamer. Die Tests, die langsamer waren, waren nur 5-10% weg.

Ich warne die Leute, die pauschal behaupten, RAID5 sei langsam, jeder sagt es online, aber es ist einfach nicht in jedem Fall wahr.


-1

Sie haben einen Mixbeutel mit Süßigkeiten zur Auswahl und es kommt wirklich darauf an, welchen Geschmack Sie haben möchten.

  1. DBs verfügen über eine Konfiguration zum Zwischenspeichern von Abfragen und wo dieser Zwischenspeicher vorhanden ist, Arbeitsspeicher oder Festplatte.
  2. RAID 5 ist nicht immer das schnellste, aber RAID 0 (JBOD) ist ein Stripe und schnell, da RAID 5 auch ein Stripe ist, ist die Idee ähnlich.
  3. RAID 1 wird Ihre Geschwindigkeit nicht verbessern, es ist nur ein Spiegel.
  4. Die SQL-Leistung basiert auf der Indizierung und muss als Erstes überprüft werden. Sehr wichtig in relationalen Datenbanken.
  5. Indizieren Sie nicht alles, eine Überindizierung kann auch die Geschwindigkeit verringern, da Ihre Indizierung überlastet wird.
  6. Mit SQL Joins wird die Datenbank manchmal langsamer. Die Verwendung der Programmierung zum Schleifen einer Reihe von minimalen indizierten Ergebnissen verbessert die Geschwindigkeit.
  7. Virtuelle Server sind ein Albtraum für die Geschwindigkeit, wenn Sie die Dollars nicht bezahlen.

Investieren Sie einfach in das Wissen (kostenlos), bevor Sie Bargeld abheben. 1. Lernen Sie die Konfigurationen für Ihre Datenbank kennen und schauen Sie sich Ihre aktuelle Konfiguration an, um sie zu optimieren. 2. Sehen Sie sich die Programmier- und SQL-Anweisungen an. Unit-Test mit einfachen Skripten, die die beteiligten Vorgänge imitieren. Möglicherweise ist es nicht einmal das, was Sie für das Problem halten. WENN die einfachen Skripte mithilfe von SQL-Joins Zeit in Anspruch nehmen, teilen Sie sie auf und tun dasselbe mit einer programmierten Schleife, um dasselbe zu tun. Dies ist, wo Speicher helfen kann 3. Schauen Sie sich den Hosting-Plan und den Server an. Verwenden Sie ps aux in einer Linux-Konsole und prüfen Sie, ob etwas Ihren Speicher und den Prozessor aufgesaugt hat.

Das absolute Festplattenlaufwerk verbessert die Geschwindigkeit, ist jedoch in einem virtuellen Serverraum nicht an Sie gebunden. Der Speicher verbessert die Geschwindigkeit nur, wenn Sie die Dienste für diesen Zeitraum konfigurieren. Striped RAID (0,5), RPM und synchrones Lesen / Schreiben mit einem schnellen Bus helfen dabei. Ein Core-Prozessor mit einem guten l1-, l2-, l3-Cache hilft bei der Verarbeitung von Engpässen. kann ich es für Xeon hören!


2
RAID1 verbessert die Geschwindigkeit in Lesesituationen auf jeden Fall. Die meisten Steuerungen sind intelligent genug, um mit mehreren Spindeln gleichzeitig aus (identischen) Datensätzen zu lesen. RAID0 ist eine schlechte Idee, da Sie jeweils auf eine Spindel beschränkt sind.
Bryan Boettcher

-4

Insgesamt müssen Sie Größe und Skalierbarkeit berücksichtigen. Während Sie mit einem geringen Speicherbedarf zu beginnen scheinen, werden Ihre Daten sehr schnell und exponentiell wachsen. DBs verwenden am besten atomare Daten, dh Daten, die auf die kleinstmögliche Größe heruntergebrochen werden. Aufgrund der geringen Größe bewegt es sich schneller im Data Warehouse. Dann berücksichtigen Sie auch die DB-Struktur. In Zukunft könnten Sie Verbindungen zu externen Datenbanken herstellen, weshalb die Struktur ebenfalls von entscheidender Bedeutung ist. In diesem Szenario würde es für Ihre Abfrage kaum einen Unterschied machen, ob die Hälfte der Daten außerhalb Ihres Data Marts gespeichert ist. Wenn Daten abgefragt werden, besteht der Punkt nicht darin, gespeicherte Daten im RAM zu behalten; Vielmehr sollte die Abfrage schnell auf Daten zugreifen und diese zurückgeben können.

  • Sie verwenden RAID 5 nicht immer für Daten. Es hängt von den Daten und ihrer Wichtigkeit ab, abgesehen von dem, was zuvor über Backups erwähnt wurde. RAID 1 kann verwendet werden und ist.
  • Sie müssten alle Server in Ihrem Abfragebereich aktualisieren, um die Geschwindigkeit zu verbessern. Da sich viele Daten außerhalb Ihrer Kontrolle befinden, kann es zu Engpässen außerhalb Ihres Datamart kommen. (Für den Fall, dass Sie Ihr eigenes Upgrade durchführen)

Wow, hast du das aus deinem (Missverständnis) deiner Lehrbücher kopiert?
13.

Pfui. Wie oft muss man den Leuten sagen, dass RAID keine Backup-Lösung ist?
Cromulent
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.