Ich sehe keine Leistungssteigerungen bei Postgres beim Schreiben. Ich dachte, ich würde dies mit einer einzelnen SSD im Vergleich zu einem Hardware-RAID-10-Array mit (16) SAS-Laufwerken mit 15.000 U / min tun.
Ich habe einen Dell R820 mit einer PERC H700-Hardware-RAID-Karte und 16 SAS-Laufwerken mit 15.000 U / min in einem RAID 10-Array sowie eine 800 s Intel s3700 SSD. Der Server verfügt über 128 GB RAM und 64 Kerne Xeon E5-4640 mit 2,40 GHz, auf denen CentOS 6.4 und Postgres 9.2.4 ausgeführt werden.
Ich verwende pgbench, um die SAS-Laufwerke in einem RAID 10-Array mit der einzelnen SSD zu vergleichen.
SAS RAID 10-Ergebnisse mit 15.000 U / min
pgbench -U postgres -p 5432 -T 50 -c 10 pgbench Startvakuum ... Ende. Transaktionstyp: TPC-B (Art von) Skalierungsfaktor: 1 Abfragemodus: einfach Anzahl der Kunden: 10 Anzahl der Threads: 1 Dauer: 50 s Anzahl der tatsächlich verarbeiteten Transaktionen: 90992 tps = 1819.625430 (einschließlich Verbindungsaufbau) tps = 1821.417384 (ohne Verbindungsaufbau)
Einzelne Intel s3700 SSD Ergebnisse
pgbench -U postgres -p 5444 -T 50 -c 10 pgbench Startvakuum ... Ende. Transaktionstyp: TPC-B (Art von) Skalierungsfaktor: 1 Abfragemodus: einfach Anzahl der Kunden: 10 Anzahl der Threads: 1 Dauer: 50 s Anzahl der tatsächlich verarbeiteten Transaktionen: 140597 tps = 2811.687286 (einschließlich Verbindungsaufbau) tps = 2814.578386 (ohne Verbindungsaufbau)
In der Praxis haben wir einen sehr schreibintensiven Prozess, der ungefähr 7 Minuten dauert, und das RAID 10-Array und die SSD befinden sich innerhalb von 10 oder 15 Sekunden voneinander.
Ich habe von der SSD eine weitaus bessere Leistung erwartet.
Hier sind Bonnie ++ Ergebnisse für die SSD:
Version 1.96 ------ Sequenzielle Ausgabe ------ - Sequenzielle Eingabe- - Zufällige- Parallelität 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Maschinengröße K / s% CP K / s% CP K / s% CP K / s% CP K / s% CP / s% CP openlink2.rady 252G 532 99 375323 97 183855 45 1938 99 478149 54 +++++ +++ Latenz 33382us 82425us 168ms 12966us 10879us 10208us Version 1.96 ------ Sequentielles Erstellen ------ -------- Zufälliges Erstellen -------- openlink2.radyn.com -Create-- --Read --- -Delete-- -Create-- --Read --- -Delete-- Dateien / Sek.% CP / Sek.% CP / Sek.% CP / Sek.% CP / Sek.% CP / Sek.% CP 16 5541 46 +++++ +++ +++++ +++ 18407 99 +++++ +++ +++++ +++ Latenz 1271us 1055us 1157us 456us 20us 408us
Hier sind die Bonnie ++ - Ergebnisse für die RAID 10-Laufwerke mit 15.000 U / min:
Version 1.96 ------ Sequenzielle Ausgabe ------ - Sequenzielle Eingabe- - Zufällige- Parallelität 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Maschinengröße K / s% CP K / s% CP K / s% CP K / s% CP K / s% CP / s% CP openlink2.rady 252G 460 99 455060 98 309526 56 2156 94 667844 70 197.9 85 Latenz 37811us 62175us 393ms 75392us 169ms 17633us Version 1.96 ------ Sequentielles Erstellen ------ -------- Zufälliges Erstellen -------- openlink2.radyn.com -Create-- --Read --- -Delete-- -Create-- --Read --- -Delete-- Dateien / Sek.% CP / Sek.% CP / Sek.% CP / Sek.% CP / Sek.% CP / Sek.% CP 16 12045 95 +++++ +++ +++++ +++ 16851 98 +++++ +++ +++++ +++ Latenz 7879us 504us 555us 449us 24us 377us
Hier sind dd Ergebnisse für die SSD:
dd if = / dev / zero von = / path / on / ssd bs = 1M count = 4096 conv = fdatasync, notrunc 4294967296 Bytes (4,3 GB) kopiert, 12,7438 s, 337 MB / s
Und hier sind die dd-Ergebnisse für die RAID 10-Laufwerke mit 15.000 U / min:
dd if = / dev / zero von = / path / on / array bs = 1M count = 4096 conv = fdatasync, notrunc 4294967296 Bytes (4,3 GB) kopiert, 8,45972 s, 508 MB / s
Ich würde die Postgres-Konfiguration veröffentlichen, aber es ist klar, dass die SSD das RAID 10-Array nicht übertrifft, sodass sie nicht anwendbar zu sein scheint.
Funktioniert die SSD also so, wie sie sein sollte?
Oder ist das RAID 10 mit 16 schnellen Laufwerken so gut, dass es eine einzelne SSD übertrifft? Ein RAID 10-Array der SSDs wäre fantastisch, aber bei jeweils 2.000 US-Dollar ist der Preis von 8.000 US-Dollar schwer zu rechtfertigen (es sei denn, wir waren sicher, dass wir die erhofften 2- bis 5-fachen Zuwächse bei den Leistungssteigerungen in der realen Welt sehen würden).
==========================================
Es stellt sich heraus, dass wir 16 SAS-Laufwerke im Array haben, nicht 8. Ich denke, der kombinierte Durchsatz ist
Hier sind die Benchmarks der Iozone, die mehr Licht ins Dunkel bringen. Das RAID10-Array liefert ziemlich konsistent bessere Ergebnisse. 4 oder 8 der SSDs in RAID 10 würden wahrscheinlich das SAS-Array schlagen (natürlich zu einem hohen Preis).
SSD-Benchmark http://pastebin.com/vEMHCQhR
RAID-10-Benchmark mit 16 Laufwerken http://pastebin.com/LQNrm7tT
Hier ist die Postgres-Konfiguration für die SSD, falls jemand Verbesserungspotenzial sieht, um die SSD http://pastebin.com/Qsb3Ks7Y zu nutzen
quelle
pg_test_fsync
, und anstattdd
, Verwendungsysbench
‚s Disk - I / O - Tests.Antworten:
Ich bin mir nicht sicher, ob dies an sich schon ein Problem ist, da, wie Sie sehen können, ein einzelnes SSD-Laufwerk in vielen Tests ein RAID 10-Setup mit 8 Festplatten übertreffen kann.
Fast alle Tests deuten auf eine bessere Geschwindigkeit des einzelnen SSD-Laufwerks hin:
In einem einzigen Fall wurde diese SSD übertroffen, und das waren sequentielle Schreibvorgänge. Was, würde ich sagen, am häufigsten für Stapel ist, nicht für einen OLTP-Ladestil. Wenn Sie also hauptsächlich solche Schreibvorgänge ausführen, ist eine einzelne SSD derzeit möglicherweise keine Lösung für Sie.
Und wir sprechen nicht über Fusion-IO- Laufwerke (von denen ich vermute, dass sie Ihnen das nächste Level bringen, das Sie erwarten, aber zu einem Preis der nächsten Level).
Aus der Sicht des DBA, der im Laufe der Jahre mit beschissenem Speicher arbeiten musste, ist dies ein fairer technologischer Fortschritt und sie scheinen richtig zu funktionieren, aber vielleicht habe ich meine Erwartungen zu niedrig gesetzt.
Ich würde mehr Verbesserungen von Ihrer SSD erwarten, wenn Sie den Benchmark mit mehr Threads und höherer Parallelität testen, da hier die SSDs glänzen. Wenn Sie also Ihre Tests mit viel mehr Clients und mehr Threads wiederholen könnten , wäre ich neugierig auf dieses Vergleichsergebnis.
quelle
Ein paar Möglichkeiten:
quelle
Anstatt alle Eier in einen Korb zu werfen (alle SSDs oder alle Festplatten), sollten Sie ein Hybrid-Festplattenlayout in Betracht ziehen. Was meine ich ?
pg_xlog
Ordner aufgewendet werden muss . Transaktionsprotokolle werden immer nacheinander geschrieben.VORSCHLAG
Vielleicht sollten Sie
pg_xlog
auf den RAID10-SAS-Laufwerken mounten. Dies kann dazu beitragen, die Anzahl der tatsächlich benötigten SAS-Laufwerke zu verringern. Alles andere kann auf SSD bleiben. Dieser Weg:Versuche es !!!
UPDATE 27.06.2013 07:38 EDT
Hier ist eine Tabelle aller Ordner in postgresql :
pg_xlog
Versuchen Sie, andere Teile der ACID-Konformität auch auf SAS zu verschieben, da sich die Umstellung auf SAS um 10% verbessert hat. Vielleicht bewegtpg_twophase
,pg_multixact
,pg_clog
kann auch helfen.quelle