SSD vs HDD für Datenbanken

42

Ich versuche, einen neuen Server zu erwerben, auf dem MySQL Server ausgeführt werden kann. Dieser neue Server wird ein Slave meines Hauptrechners sein. Dieser Server ist jedoch nur für die Berichterstellung "Viele Lesevorgänge und komplexe Abfragen" vorgesehen.

Jetzt möchte ich in Solid-State-Festplatten investieren, habe mich aber gefragt, ob es den Preis wirklich wert ist. Der Unterschied zwischen einer SSD und einer SATA 7200-Festplatte beträgt ungefähr 1500 US-Dollar, und die SSD verfügt über weniger Festplattenspeicher. Wenn ich in SSD investiere, macht sich die Geschwindigkeit bemerkbar?

Ich kann 4 (500 GB SATA 7200) für 1500 US-Dollar weniger kaufen als 2 (500 GB SSD).

Können Sie mir bitte bei der Entscheidung helfen, ob sich das Upgrade lohnt oder nicht?

Noch etwas, das ich erwähnen möchte, ist, dass ich nicht benutze, query_cacheso dass es viele Festplattenlesevorgänge geben wird.

Dieser Server wird 32 GB RAM haben und Ubuntu 12.04 ausführen

Mike
quelle
Wie groß ist Ihre Datenbank in Gigabyte? Welche der folgenden Antworten am zutreffendsten ist, hängt davon ab, wie viele Daten vorhanden sind.
Nathan Jolly
1
Wenn Sie dennoch SSDs verwenden, können Sie bis April auf Ubuntu 14.04 warten oder TRIM am 12.04 manuell aktivieren. Weitere Informationen finden Sie in diesem Artikel .
OSE
5
Serial ATA (SATA) ist die Schnittstelle. Es gibt SATA-SSDs und Festplatten (HDDs), die kein SATA verwenden.
Dennis
Etwas zu kaufen, das für Sie kein Geld bringt, ist kaum eine Investition ...
inf3rno

Antworten:

25

Ja, mit vielen Lesevorgängen und dem Melden einer SSD wird sich ein großer Unterschied ergeben. Ab einer Drehzahl von 7200 U / min können Sie nicht mehr als ~ 100 IOPS erwarten, während die billigste SSD mindestens 5x so schnell sein kann. Mit einer guten SSD können Sie 20000 IOPS oder mehr erreichen.

Auch zufällige Schreibvorgänge auf SSD sind viel schneller, da sich die Festplatte nicht jedes Mal bewegen muss.

nmad
quelle
4
Wie würden Sie eine gute SSD definieren?
Mike
Es dreht sich alles um Leistung und Benchmarks. Was ich tun würde, ist Google für Benchmarks oder Bewertungen des Modells der SSD, die Sie kaufen. Anders als das en.wikipedia.org/wiki/IOPS#Examples gibt eine sehr allgemeine Übersicht.
nmad
20

Es gibt drei Faktoren, die Sie hier berücksichtigen müssen:

  1. Die Größe Ihrer Datenbank
  2. Die Menge an Speicher, die Sie auf dem Server haben
  3. Ihre my.cnf-Konfiguration, speziell innodb_buffer_pool_size

Wenn verfügbarer Speicher> Datenbankgröße , kann Ihr Server wahrscheinlich alle Ihre Daten im Speicher behalten, und daher ist eine SSD möglicherweise eine Geldverschwendung. Der InnoDB-Puffer hat nichts mit den query_cacheOptionen zu tun .

Wenn der verfügbare Speicher <Datenbankgröße ist , müssen Abfragen möglicherweise Daten von der Festplatte abrufen. Bei extrem komplexen Abfragen oder wenn viele Benutzer gleichzeitig Abfragen ausführen, kann dies zu einer Belastung der Festplatte führen.

Im Allgemeinen speichern Datenbanken die am häufigsten verwendeten Daten im Arbeitsspeicher. Wenn 80% Ihrer Daten selten oder nie verwendet werden, müssen Sie nur 20% Ihrer Datenbank im Arbeitsspeicher belassen, um die Leistung aufrechtzuerhalten.

Die genaue Menge an Speicher, die Sie benötigen, wird nicht sofort ersichtlich sein. Wenn Ihre Datenbank jedoch nicht über 200 GB verfügt, würde ich Up_Ones Ratschlag uneingeschränkt empfehlen, statt SSDs zusätzliches Geld für Speicher auszugeben.

NB: Wenn Ihre Datenbank MyISAM verwendet (Sie können dies mit überprüfen show table status;), ziehen Sie in Betracht, auf InnoDB zu wechseln. Der MyISAM key_buffer_cachespeichert nur Indexblöcke, während der InnoDB-Pufferpool ganze Datenblöcke speichert. In den meisten Fällen wird sich InnoDB als bessere Engine für die Arbeit erweisen.

Nathan Jolly
quelle
Wie kann ich die Datenbank im Speicher ablegen? Der Server ist ein Slave, so dass er die ganze Zeit über Schreibzugriffe hat, aber aufgrund der Berichte auch eine hohe
Mike
Wenn Ihre Tabellen InnoDB sind und Ihr InnoDB-Pufferpool groß genug ist, verwaltet MySQL automatisch das Caching Ihrer Datenbank im Speicher und versucht, die am häufigsten verwendeten Daten die ganze Zeit im Speicher zu behalten. Die MySQL-Dokumentation bietet einen ziemlich guten Überblick darüber, wie dies funktioniert .
Nathan Jolly
@ NathanJolly Auch wenn sich die gesamte Datenbank im Arbeitsspeicher befindet, werden beim Speichern der Daten weiterhin Lese- und Schreibvorgänge auf der Festplatte ausgeführt. Die Anzahl der Server ist begrenzt. Beispielsweise ist die SQL Server Express-Version auf die Verwendung von nur 1 GB begrenzt, sodass keine große Datenbank im Arbeitsspeicher an der ersten Stelle untergebracht werden kann.
Jackofall
@Jackofall, während das absolut wahr ist, spezifizierte die Frage hier eine leselastige MySQL-Datenbank. Jede schreibgeschützte Abfrage, die vom Arbeitsspeicher bereitgestellt werden kann, anstatt auf die Festplatte zuzugreifen - auch auf die schnelle Festplatte - ist eine gute Nachricht.
Nathan Jolly
6

Ich halte das nicht für eine so gute Idee!
Mein Rat:
Wenn Sie den InnoDB-Pufferpool vergrößern, können Sie MySQL am besten beschleunigen. Wenn Sie mehr RAM hinzufügen können, tun Sie es. Dadurch werden die meisten Ihrer aktuellen Daten gespeichert. Stellen Sie sich das vor! Disk vs Memory!
Das perfekte Szenario ist, dass Ihr Speicher die Größe Ihrer Datenbank-
SSD hat - großartig, aber es wird teuer! und es ist nur gut für leseintensive Jobs.

Unter diesem Link finden Sie einen schönen Artikel von Vadim Tkachenko

Up_One
quelle
1
Der Artikel, auf den Sie verlinken, ist fast 4 Jahre alt, die SSD-Preise sind im Vergleich zu diesem Zeitpunkt um mehr als die Hälfte niedriger und die Leistung ist ebenfalls stark gestiegen. Speicher die Größe der Datenbank? Was ist mit 500 GB Datenbank? Ist nicht nur die Menge an RAM, sondern auch der Server, den Sie kaufen müssen, der so viele Speicherbänke zur Verfügung hat.
Jaroslaw,
Bezüglich DB-Größe! Ja, auf keinen Fall können Sie das tun - aber wie gesagt, das wäre ein perfektes Szenario!
Up_One
6

Als Alternative: Sie könnten beide verwenden, eine große Festplatte (idealerweise RAID1 mit drei Festplatten), um Daten zu speichern, und eine kleinere SSD, um Indizes zu speichern.

Begründung:

  • Die Indizes sind ziemlich klein, so dass Sie eine kleinere SSD verwenden können
  • häufige Abfragen sollten sowieso hauptsächlich die Indizes treffen
  • Das RAID1 bietet Fehlertoleranz
  • Das RAID1 bietet Ihnen einen Lastausgleich für zufällige Lesevorgänge
  • Bei drei Datenträgern bleibt die Fehlertoleranz erhalten, wenn ein Datenträger ausfällt
  • Die Indizes können neu erstellt werden, wenn die SSD ausfällt
Simon Richter
quelle
5

Tu es.

Sie haben erwähnt, dass Sie eine hohe Arbeitsbelastung durch Lesezugriffe haben, sodass Sie das große Problem mit der Verwendung von SSDs in Datenbanken bereits vermieden haben: den Verschleiß. Kein Schreiben bedeutet keine Abnutzung, also bist du golden.

Wie ich bereits erwähnte, ist Ihr IOPS mit der SSD um Größenordnungen schneller als mit sich drehenden Festplatten. Für eine Datenbank wird IOPS so ziemlich in Anforderungen pro Sekunde übersetzt. Wenn Sie den RAM-Cache ignorieren, werden Sie ungefähr 100-mal so viele Anfragen von einer SSD als von einer 7200RPM-Festplatte bearbeiten.

TRIM wird keinen großen Unterschied machen, da es sich um eine Arbeitslast mit hohem Leseaufwand handelt und Sie sowieso vorhaben, die Festplatte zu füllen. Mach dir keine Sorgen.

Ich bin mir nicht sicher, woher das 1500-Dollar-Ding kam. Wenn ich meinen lokalen (australischen) Lieferanten überprüfe, kann ich eine SSD mit 960 GB für $ 750 erhalten ( http://www.auspcmarket.com.au/960gb-crucial-m500-sata-6gbps-2-5-7mm-with- 9-5mm-adapter-ssd-read-500mb-s-write-400mb-s / ). Spinning Disks sind mehr oder weniger kostenlos, aber 750 US-Dollar sind immer noch viel schmackhafter als 1500 US-Dollar.

(Oh, warte - du bestellst wahrscheinlich bei einem namhaften Anbieter, also wird dir die SSD über die Nase berechnet? Ich kaufe die SSD immer separat und tausche sie selbst aus, aber ich weiß nicht, ob das so ist in Ihrer Umgebung zulässig.)

Sie werden wahrscheinlich auch mit weniger RAM davonkommen, aber ohne Ihre genaue Arbeitslast zu kennen, ist es schwierig zu beurteilen, ob Sie RAM sicher reduzieren können, ohne die Leistung zu beeinträchtigen.

Wenn Sie sich immer noch nicht sicher sind, können Sie große Laufwerke mit 10.000 U / min kaufen, aber diese kosten sowieso fast so viel wie die SSD, während sie viel langsamer sind.

Wenn Sie weit über 1 TB hinaus skalieren müssen, werden SSDs zu teuer, aber bei 1 TB würde ich sagen, dass die SSD ein klarer Gewinn ist.

Ian Howson
quelle
3

Ich bin mir definitiv einig, dass der größte Knall für das Geld von der Vergrößerung Ihres innodb_db_bufferpools herrührt, aber leider hängt dies vollständig davon ab, wie groß Ihr Datensatz ist und wie oft auf verschiedene Festplattenblöcke zugegriffen wird. Ich verwalte mehrere Datenbanken mit einer Größe von über 200 GB, so dass es eigentlich keine Option ist, alles in den Arbeitsspeicher einzubauen. Aus diesem Grund haben wir kürzlich auf SSD-basierten Speicher umgestellt. Ich habe mich intensiv mit der Verwendung von IOPS für MySQL auf verschiedenen RAID-Arrays befasst, auf die ich Zugriff habe. Hier sind die Ergebnisse:

1.253 IOPS - 4 x SCSI 15k (3.5 ") Festplatte

Test: (g = 0): rw = randrw, bs = 4K - 4K / 4K - 4K / 4K - 4K, ioengine = libaio, iodepth = 64 gelesen: io = 3071,7 MB, bw = 5012,8 KB / s, iops = 1253 , runt = 627475 ms schreiben: io = 1024,4 MB, bw = 1671,7 KB / s, iops = 417, runt = 627475 ms cpu: usr = 0,63%, sys = 3,11%, ctx = 985926, majf = 0, minf = 22

2.558 IOPS - 8 x 10K RPM 900 GB SAS (2,5 ") Festplatte

Test: (g = 0): rw = randrw, bs = 4K - 4K / 4K - 4K / 4K - 4K, ioengine = libaio, iodepth = 64 gelesen: io = 3071,7 MB, bw = 10236 KB / s, iops = 2558, runt = 307293 ms schreiben: io = 1024,4 MB, bw = 3413,5 KB / s, iops = 853, runt = 307293 ms cpu: usr = 2,73%, sys = 8,72%, ctx = 904875, majf = 0, minf = 25

23.456 IOPS - Rackspace Performance 2-SSD-Server

Test: (g = 0): rw = randrw, bs = 4K - 4K / 4K - 4K / 4K - 4K, ioengine = libaio, iodepth = 64 gelesen: io = 3071,7 MB, bw = 93708 KB / s, iops = 23426, runt = 33566 ms schreiben: io = 1024,4 MB, bw = 31249 KB / s, iops = 7812, runt = 33566 ms cpu: usr = 5,73%, sys = 35,83%, ctx = 181568, majf = 0, minf = 23

35.484 IOPS - 2 x gespiegelte EDGE-Erhöhung 480 GB 2,5-Zoll-MLC ( http://www.edgememory.com )

Test: (g = 0): rw = randrw, bs = 4K - 4K / 4K - 4K / 4K - 4K, ioengine = libaio, iodepth = 64 gelesen: io = 3068,4 MB, bw = 141934 KB / s, iops = 35483, runt = 22137 ms schreiben: io = 1027,7 MB, bw = 47537 KB / s, iops = 11884, runt = 22137 ms CPU: usr = 11,68%, sys = 69,89%, ctx = 24379, majf = 0, minf = 20

So ist es klar, dass hochwertige SSD von heute erstaunliche Leistungsträger sind. Zwei gespiegelte SSDs können 16-Platten-SAN-Speichergehäuse problemlos übertreffen, und das ist allein schon eine überzeugende Aussage.

Wenn Sie sich für alle Details interessieren, finden Sie den Rest des Artikels in meinem Blog:

http://www.juhavehnia.com/2015/05/using-ssds-to-prove-mysql-performance.html

Juha Vehnia
quelle